質問

私は私のIoCニーズに合わせてのStructureMapで働いています。

物事が愉快にテスト可能にするために、私は通常、コンストラクタのパラメータとして、可能な限りの周りIContainerインスタンスを渡しています。便利なように、私は、パラメータなしのコンストラクタのためObjectFactoryを使用してにフォールバックできるようにしたいと思います。

これを実行する最も簡単な方法は、(私が思った)単にIContainerObjectFactoryクラスラップを取得し、他のコンストラクタにいることを渡すことであろう。残念ながら、私はこのインスタンスが一般に公開されてどこにも見つけることができません。

質問です:

私は単純にユーザーが提供するインスタンスなどとして、それを扱うことができるようにIContainerObjectFactoryを取得する方法はありますか?

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

例:

I以下のことを行うことができるようにしたいと思います:

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

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

    public IContainer Container { get; private set; }
}
役に立ちましたか?

解決

ObjectFactoryには、あなたが探しているいるIContainerを与えるコンテナプロパティを公開します。

いつでも、あなたは常にあなたのクラスのctorで、それへの依存を取ることができます(多くの場合、すべきではない)いるIContainerを必要としています。

public class INeedAContainer
{
    private readonly IContainer _container;

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

    // do stuff
}

私がいるIContainerをクローニングする方法があるとは思いません。ネストされたコンテナの寿命のために同じあなたのトランジェントを維持することができますcontainer.GetNestedContainer()メソッドがあります。ネストされたコンテナは、多くの場合、「使用する」ステートメント内で使用して、データベースのトランザクション境界のようなものの状態を制御するために非常に便利ですされます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top