StructureMap、ObjectFactoryをしているIContainer
-
22-09-2019 - |
質問
私は私のIoCニーズに合わせてのStructureMapで働いています。
物事が愉快にテスト可能にするために、私は通常、コンストラクタのパラメータとして、可能な限りの周りIContainer
インスタンスを渡しています。便利なように、私は、パラメータなしのコンストラクタのためObjectFactory
を使用してにフォールバックできるようにしたいと思います。
これを実行する最も簡単な方法は、(私が思った)単にIContainer
にObjectFactory
クラスラップを取得し、他のコンストラクタにいることを渡すことであろう。残念ながら、私はこのインスタンスが一般に公開されてどこにも見つけることができません。
質問です:
私は単純にユーザーが提供するインスタンスなどとして、それを扱うことができるようにIContainer
内ObjectFactory
を取得する方法はありますか?
また、新しい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()メソッドがあります。ネストされたコンテナは、多くの場合、「使用する」ステートメント内で使用して、データベースのトランザクション境界のようなものの状態を制御するために非常に便利ですされます。