さまざまな構成設定を容易にするために、登録の基本セットから多数の子コンテナーを分岐しようとしています。
子コンテナーがどのように機能するかについてのMarkSeemannsの回答に基づいて、基本登録の特定のコンポーネントをオーバーライドするために子コンテナーを使用できると思いました。しかし、Seemannが主張するように私は働いていないようです。
マークによると、これはうまくいくはずです:
[TestMethod]
public void OverrideRegistrationInParentContainer()
{
//IBusinessComponent depends on IBasicComponent
var parentContainer = new WindsorContainer();
parentContainer.Register(Component.For<IBasicComponent>().ImplementedBy<BasicComponent>()); //Returns 42
parentContainer.Register(Component.For<IBusinessComponent>().ImplementedBy<RealBusinessComponent>()); //Returns the result of IBasicComponent
var childContainer = new WindsorContainer();
childContainer.Register(Component.For<IBasicComponent>().ImplementedBy<BasicComponent2>()); //Returns 40
parentContainer.AddChildContainer(childContainer);
var service = childContainer.Resolve<IBusinessComponent>();
Assert.AreEqual(40, service.GetBusinessValue()); //This fails with the actual value being 42
}
ただし、すべての依存関係は明らかに親から解決されます。
parentContainerからIBasicComponent登録を削除すると、登録が欠落しているため、依存関係を解決することさえできません。
Seemannが主張するようにコンテナーをどのように動作させるかを誰かが説明できますか、それともWindsorContainerはこのタイプの構成を適切に処理できないのでしょうか。