3

さまざまな構成設定を容易にするために、登録の基本セットから多数の子コンテナーを分岐しようとしています。

子コンテナーがどのように機能するかについての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はこのタイプの構成を適切に処理できないのでしょうか。

4

1 に答える 1

4

あなたが参照している動作は、古い Windsor バージョンで機能していましたが、最近のバージョンでは変更されました。

基本的にこれはバグであり、子コンテナーのコンポーネントがそのスコープ外に表示される可能性があります (コンポーネント フォームの親が子のコンポーネントに依存する場合)。

したがって、依存関係は子から親への移行が許可されますが、その逆は許可されません。

于 2013-02-22T02:41:20.093 に答える