public BranchUOW(Func<FoodieTenantContext,BranchRepository> branchRepository,
        Func<FoodieTenantContext, BranchContactRepository> branchContactRepository,
        FoodieTenantContext ctx, IMapperService mapperService)
        : base(ctx)
    {
        _ctx = ctx;
        _branchRepository = branchRepository(ctx);
        _branchContactRepository = branchContactRepository(ctx);
        _mapperService = mapperService;
    }


BranchRepository看起来像

 public BranchRepository(FoodieTenantContext ctx)
        : base(ctx)
    {
    }


尝试了以下排列

  container.Register(
          Component.For<Func<FoodieTenantContext, BranchRepository>>()
          .ImplementedBy(typeof(IRepository<BranchRepository>))
          .LifestyleTransient()
         );

        container.Register(
           Component.For<Func<FoodieTenantContext, BranchContactRepository>>()
           .ImplementedBy(typeof(IRepository<BranchContactRepository>))
           .LifestyleTransient()
          );


但是无法实例化并抛出以下错误。


  键入foodie.common.Repository.IRepository 1[[foodie.tenant.EF.Repository.Domain.BranchRepository, foodie.tenant.EF, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]] is abstract.\r\n As such, it is not possible to instansiate it as implementation of service 'foodie.common.Repository.IRepository 1 [[foodie.tenant.EF.Repository.Domain.BranchRepository,foodie.tenant.EF,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]'。您忘了代理吗?


谢谢。

最佳答案

您可以尝试以下方法:

container.Register(
    Component.For<BranchRepository>(),
    Component.For<Func<FoodieTenantContext, BranchRepository>>()
    .Instance(c => container.Resolve<BranchRepository>(new { ctx = c }))
    .LifestyleTransient()
);


但我建议宁愿去打字厂。

https://github.com/castleproject/Windsor/blob/master/docs/typed-factory-facility-interface-based.md

10-04 11:55