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.
}
}
我们的模块通常只有一个(或很少)公共类型,并且要注册的内部类/依赖性要多得多。
我有点担心,如果这种方法违反了封装原则?
看来,我们正在一个全局容器中注册所有内容(内部类型和公共类型),这可能会模糊模块的边界(公共和内部类型注册完全相同),并有可能解决.internal类。在其他地方。
在ChildContainer中注册内部依赖项不是更好吗?
还是我们做错了什么? :)
最佳答案
您的问题的答案模块在子容器中注册其视图并查看模型。仅可共享服务在全局容器中注册。
关于c# - 在IModule中注册类型和封装问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6561674/