0

現時点では、ファクトリとして機能するマッパー クラスを扱っています。

今まではマッパーとして辞書を使っていました。

IDictionary<string, Type> mapper;

アイデアは、辞書の値を 1 つ取得したときです。これはインスタンス化する必要があります。たとえば、次のようになります。

var foo = mapper["foo"];  // this should return the instance of foo

そして別の問題は次のとおりです。

var foo2 = mapper["foo"]  // should be the same instance of foo (foo == foo2)

数か月前、コンテナについて何かを見たことがあったと思いますが、用語が正しいかどうか、これが役立つかどうかはわかりません。何か案は?

アップデート:

私は本当にコードを持っていません。私が考えていたのは、辞書の値として Type の代わりに Func<> を持たせるか、クラス Activator を中間として使用する必要があるということですが、これらは良いオプションではないと思います。コード ビハインドに 100 個以上のアイテムを追加する予定で、とても疲れます。

4

2 に答える 2

1

これは、 ServiceLocatorAnti-Patternと呼ばれます。

代わりに、@drumboogが提案したものを調べてください-依存性注入コンテナ

これを完全に説明するには、文字通りが必要です。

于 2012-07-28T04:53:54.753 に答える
1

こんな感じですか?

abstract class MyBase { }
class Type1 : MyBase { }
class Type2 : MyBase { }
class Type3 : MyBase { }

private static readonly Dictionary<Type, Func<MyBase>> sConstructors =
   new Dictionary<Type, Func<MyBase>>
{
   { typeof(Type1), () => new Type1() },
   { typeof(Type2), () => new Type2() },
   { typeof(Type3), () => new Type3() }   
};

...

Type type = typeof(Type1);
MyBase myBase = sConstructors[type]();

リフレクションを使用すると、手動で維持する代わりに、これらを自動的に構築することもできます。

于 2012-07-28T03:19:25.453 に答える