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/

10-16 08:57