C# IModule中的类型注册与封装问题

C# IModule中的类型注册与封装问题,c#,module,unity-container,prism,ioc-container,C#,Module,Unity Container,Prism,Ioc Container,common Prism设计复杂应用程序的方法是让每个实现IModule接口的模块初始化自己以使其能够工作。 在大多数情况下,这种“初始化”主要是关于向IoC容器注册某些类型。因此,在我们的例子中,IModule通常如下所示: public class Module : IModule { private IUnityContainer _container; public Module(IUnityContainer container) { _containe

common 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.
    }
}
公共类模块:IModule{
专用IUnityContainer\u容器;
公共模块(IUnityContainer容器){
_容器=容器;
}
公共无效初始化(){
//注册公共类型
_container.RegisterType();
//注册内部依赖项
_container.RegisterType();
_container.RegisterType();
//……等等。
}
}
我们的模块通常只有一个(或很少)公共类型,需要注册的内部类/依赖项要多得多

我有点担心,如果这种方法打破了封装原则? 看起来,我们正在一个全局容器中注册所有内容(内部类型和公共类型),这可能会模糊模块的边界(公共类型和内部类型注册完全相同),并可能在其他位置解析“内部”类

在ChildContainer中注册内部依赖项不是更好吗


或者我们做的事情完全错了?:)

您的问题让答案模块在子容器中注册其视图和视图模型。只有可共享服务在全局容器中注册。

这种做法(为了封装而在子容器中注册)是众所周知的吗?实际上,我还没有在iModule的上下文中阅读过它,我想知道可能没有人使用它=它不值得使用?谢谢你的回答!在基于PRISM的应用程序中,这种做法无处不在。如果没有子容器,则在创建相同视图的多个实例时会遇到问题。如果没有子容器,则无法进行MDI。