複雑なアプリケーションを設計する一般的なプリズムの方法は、各モジュールが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内に内部依存関係を登録する方が良いですか?
また、何か完全に間違っている可能性がありますか? :)
その練習(カプセル化のために子コンテナに登録すること)はよく知られていますか?私は実際にIModulesの文脈でそれについて読んでいないのですが、誰もそれを使用していないのかもしれないと思うかもしれません。ご回答有難うございます! – Shaddix
これは、PRISMベースのアプリケーションではどこでも実践です。子コンテナを持たない場合は、同じビューの複数のインスタンスを作成する際に問題が発生します.MDIは子コンテナなしでは実行できません。 – anivas