2011-07-03 48 views
2

複雑なアプリケーションを設計する一般的なプリズムの方法は、各モジュールがIModuleインタフェースを実装して動作できるように初期化することです。 ほとんどの場合、この「初期化」は主にIOCコンテナにいくつかの型を登録することです。だから、我々の場合にはIModuleは通常、次のようになります。IModuleでの型の登録とカプセル化の問題

public class Module : IModule { 
    private IUnityContainer _container; 
    public Module(IUnityContainer container) { 
     _container = container; 
    } 

    public void Initialize() { 
     //register public types 
     _container.RegisterType<IMyPublicInterface, MyImplementation>(); 


     //register internal dependencies 
     _container.RegisterType<IInternalDependency1, InternalDependency1>(); 
     _container.RegisterType<IInternalDependency2, InternalDependency2>(); 
     //..etc. 
    } 
} 

当社のモジュールは、通常は1つ(または非常に少ない)公共の種類、および登録するにははるかに内部クラス/依存関係を持っています。

このアプローチでカプセル化の原則が破られたら、私はちょっと心配していますか? グローバルなコンテナ内にすべてのもの(内部型とパブリック型の両方)を登録しているので、モジュールの境界をぼかす可能性があります(公開型と内部型の登録は完全に同じです)他の場所のクラス。

ChildContainer内に内部依存関係を登録する方が良いですか?

また、何か完全に間違っている可能性がありますか? :)

答えて

2

あなたの質問には、ビューとモデルを子コンテナに登録するという答えがあります。グローバルコンテナには共有可能なサービスのみが登録されています。

+0

その練習(カプセル化のために子コンテナに登録すること)はよく知られていますか?私は実際にIModulesの文脈でそれについて読んでいないのですが、誰もそれを使用していないのかもしれないと思うかもしれません。ご回答有難うございます! – Shaddix

+0

これは、PRISMベースのアプリケーションではどこでも実践です。子コンテナを持たない場合は、同じビューの複数のインスタンスを作成する際に問題が発生します.MDIは子コンテナなしでは実行できません。 – anivas

関連する問題