在IModule中注册类型和封装问题
本文关键字:封装 问题 类型 注册 IModule | 更新日期: 2023-09-27 18:00:54
Prism设计复杂应用程序的常用方法是让每个模块实现一个IModule接口,以初始化自己以便能够工作。在大多数情况下,这种"初始化"主要是向IoC容器注册一些类型。因此,在我们的案例中,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.
}
}
我们的模块通常只有一个(或极少数(公共类型,还有更多的内部类/依赖项需要注册。
我有点担心,如果这种方法打破了封装原理?看起来,我们正在一个全局容器中注册所有内容(内部类型和公共类型(,这可能会模糊模块的边界(公共类型和内部类型注册完全相同(,并可能实现。在其他地方解决我们的"内部"类。
在ChildContainer中注册内部依赖项不是更好吗?
或者我们可能做错了什么?:(
您的问题让答案模块在子容器中注册它们的视图和视图模型。只有可共享服务在全局容器中注册。