我的任务是注入特定的非直接子依赖项,如果顶级依赖项是某种类型的。我已经尝试使用子容器来实现这一点,但它不像我预期的那样工作。WindsorCastle子容器解决父依赖关系
我有下一个类层次结构:
PRMController: ApiController
-> PManager: IManager
-> Repository: IRepository
-> RepositoryConnection: IRepositoryConnection
RepositoryConnection() { /*use default config name*/ }
RepositoryConnection(string configName)
温莎容器旁边都有登记:
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有一个错误。那么它会得到解决吗?我可以采取什么其他策略来描述所描述的场景?