2012-02-08 8 views
0

は多分タイトルはそれほど明確か、私は(私はシステムが一緒にシェルでIFactoryですから派生するすべてのクラスを得ることができるという方法が必要になり、このシナリオ可能ですPrismのUnity IoCはすべての共通インターフェイスをモジュールから取得できますか?

SOLUTION 
| 
|_ MODULE 1 
    |_Factory1 (class) : IFactory (interface) 
| 
|_ MODULE 2 
    |_Factory2 : IFactory 
| 
|_ SHELL 
    |_List<IFactory> 

を想像してみて、間違ったメカニズム

を使用していませんリスト)。これを行う方法はありますか?私は、工場の各クラスの超大型条件付きリストを持つことを望んでいません。

つまり、各モジュールのような何かが工場を登録し、シェルがこれらのすべてを登録しているからです。

答えて

1

IModuleの実装では、ctorパラメータとしてコンテナを使用する場合、モジュールのInitialize()メソッドに各モジュールの実装IFactoryを登録できます。

public class MyModule : IModule 
{ 
    private readonly IUnityContainer container; 
    public MyModule(IUnityContainer container) 
    { 
    this.container = container; 
    } 
    public void Initialize() 
    { 
    this.container.Register<IFactory, MyFactory>("MyFactory"); 
    } 
} 

public class Shell 
{ 
    public Shell(IFactory[] factories) 
    { 
    // work with factories 
    } 
} 

私は私はそれが許容されるモジュール内でコンテナを参照するために、検索モジュールは、インフラストラクチャではなく、アプリケーション自体の一部であると考えます。それにもかかわらず、Unityから離れたいと思えば、そのコードを変更する必要があります。

このようにModulesを使用しない場合は、TecX projectをご覧ください。これにはUnity用の拡張コンフィグレーションエンジンが含まれており、アセンブリごとにコンテナコンフィグレーションをモジュール化し、その情報をすべてブートストラップから収集することができます。

+0

私は以前の編集も好きです。追加することもできますか? –

+0

@DarfZon正確に何を追加しますか?私はそれを編集したときに私の答えに最後の段落を追加しました。何も削除されませんでした。 –

関連する問題