내 작업은 최상위 수준 종속성이 특정 유형 인 경우 특정 비 직접 자식 종속성을 주입하는 것입니다. 하위 컨테이너로이 작업을 시도했지만 예상대로 작동하지 않습니다.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"모두 configname를 사용해야합니다
나는 다음의 클래스 계층 구조를 가지고있다. 따라서 하위 컨테이너는 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
누군가가이를 밝힐 수 있습니까? 부모 컨테이너에 등록 된 유형의 하위 컨테이너에서 해결하는 경우에도 윈저가 하위 컨테이너의 종속성을 선호한다고 생각했습니다. 그게 가능하지 않다면, 누군가가 나를 올바른 방향으로 이끌 수 있다면 감사 할 것입니다.
업데이트 : 에 따르면 this thread에 따르면 버그가 있습니다. 그래서 그것은 해결 될 것입니까? 설명 된 시나리오에 대해 내가 취할 수있는 다른 전략은 무엇입니까?