2

IoC のニーズに合わせて StructureMap を使用しています。

快適にテストできるようにするためIContainerに、通常はコンストラクターのパラメーターとして、可能な限りインスタンスを渡します。ObjectFactory便宜上、パラメーターなしのコンストラクターの使用にフォールバックできるようにしたいと考えています。

これを行う最も簡単な方法 (私が考えた) は、単純にクラス ラップを取得しIContainerObjectFactoryそれを他のコンストラクターに渡すことです。残念ながら、このインスタンスが公開されている場所を見つけることができません。

質問は:

ユーザー提供のインスタンスと同じくらい簡単に処理できるように、IContainer内部を取得する方法はありますか?ObjectFactory

ObjectFactoryまたは、の構成を新しいContainerインスタンスに複製する方法はありますか?

例:

私は次のことができるようにしたいと思います:

public class MyClass
{
    public MyClass()
    {
        Container = ... // The ObjectFactory container instance.
    }

    public MyClass(IContainer container)
    {
        Container = container;
    }

    public IContainer Container { get; private set; }
}
4

1 に答える 1

5

ObjectFactory は、探している IContainer を提供する Container プロパティを公開します。

IContainer が必要なときはいつでも (頻繁ではないはずです)、クラス ctor でいつでもそれに依存することができます。

public class INeedAContainer
{
    private readonly IContainer _container;

    public INeedAContainer(IContainer container)
    {
        _container = container;
    }

    // do stuff
}

IContainer を複製する方法はないと思います。ネストされたコンテナの存続期間中、トランジェントを同じに保つことができる container.GetNestedContainer() メソッドがあります。ネストされたコンテナーは、「using」ステートメント内でよく使用され、データベース トランザクション境界などの状態を制御するのに非常に便利です。

于 2010-01-26T21:16:40.047 に答える