私が正しくファクトリパターンを理解していれば、私は...のIoCとファクトリパターン
public interface IRepoFactory
{
T Get<T>() where T : IRepo
}
そして、その工場でRepoFactory.Get<IRepo1>()
意志への呼び出しを、このようなインターフェイスを実装し、私のレポを作成するための工場を持っているかもしれませんIRepo1を実装するクラスの新しく作成されたインスタンスを返します。
ので、RepoFactory
の定義に私は、私はパラメータとして、取りRepofactory
のコンストラクタを定義することができ、想定し、...
switch(...)
{
case typeof(IRepo1):
return new Repo1();
}
を適切な型の新しいインスタンスを作成したりしますすべての可能な戻り値の型を表すインターフェイス...
public RepoFactory(IRepo1 repo1, IRepo2 repo2, ..., IRepoN repoN) : IRepoFactory
私のIoCコンテナは、クラスを作成する作業を行います。
だから、私の質問に。私がの場合上記のようにコンストラクタを作成すると、コンストラクタパラメータとしてIRepoFactory
を含めるたびに、Repo1、Repo2、...、RepoNの新しいインスタンスが作成されます。それはリソースの重いプロセスですか?どのような場合でも、利用可能なレポの総数のサブセットのみが必要な場合は、無駄なやり方ですか?
IoC(私の場合はUnity)を取得する方法は必要なときにインスタンスを作成するだけですか?レイジーロード?それとも、私は何も心配していませんか?
私はUnityを使用していませんが、AutofacとStructureMapは両方ともオブジェクトファクトリをボックスから取り出すことができます。コンストラクタパラメータを関数、つまりMyClass(Func> repoFactory)にします。次に、依存関係を取っているクラスで、var repo = repoFactory()と言うと、新しいインスタンスを取得できます。 Unityにも同様の機能があります。 –
Nelson
私はdocs @ Nelson、Taを通して別の噂をするでしょう。 –