gpt4 book ai didi

c# - 如何使用 Windsor 容器注入(inject) Func

转载 作者:太空宇宙 更新时间:2023-11-03 12:12:24 25 4
gpt4 key购买 nike

 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()
);

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

Type foodie.common.Repository.IRepository1[[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.IRepository1[[foodie.tenant.EF.Repository.Domain.BranchRepository, foodie.tenant.EF, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]'. Did you forget to proxy it?

谢谢。

最佳答案

你可以试试这个:

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

但我更推荐去 typed factory。

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

关于c# - 如何使用 Windsor 容器注入(inject) Func<T,U>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51466297/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com