【发布时间】:2014-10-30 16:36:00
【问题描述】:
如果顶级依赖项属于某种类型,我的任务是注入特定的非直接子依赖项。我已经尝试使用子容器来实现这一点,但它并没有像我预期的那样工作。
我有下一个类层次结构:
PRMController: ApiController
-> PManager: IManager
-> Repository: IRepository
-> RepositoryConnection: IRepositoryConnection
RepositoryConnection() { /*use default config name*/ }
RepositoryConnection(string configName)
windsor 容器有下一个注册:
container.Register(Classes.FromAssemblyInThisApplication()
Pick()
.Configure(c =>
{
c.Named(Guid.NewGuid().ToString());
c.IsFallback();
})
.WithService.DefaultInterfaces()
.LifestyleTransient()
);
var childContainer = new WindsorContainer()
.Register(
Component.For<IRepositoryConnection>().ImplementedBy<RepositoryConnection>()
.DependsOn(Dependency.OnValue("configName", "PRM"))
.LifestyleTransient()
);
container.AddChildContainer(childContainer);
现在对于 PRM 控制器,它应该使用“PRM”配置名称。因此子容器用于解析 PRM 控制器。但是RepositoryConnection 是通过默认配置解析的。
childContainer.Resolve<IRepositoryConnection>(); //as expected, resolves from child container registrations
childContainer.Resolve<PRMController>(); //NOT as expected, the underlying repositoryConnection is from parent container
有人可以解释一下吗? 我认为 Windsor 会更喜欢子容器依赖项,即使它们存在,即使从子容器中解析在父容器中注册的类型。 如果这无法实现,如果有人能引导我朝着正确的方向前进,我将不胜感激。
更新: 根据this thread 有一个错误。那么它会得到解决吗?对于所描述的场景,我还可以采取什么其他策略?
【问题讨论】:
标签: asp.net-mvc castle-windsor ioc-container