在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中注册内部依赖项不是更好吗?

或者我们可能做错了什么?:(

在IModule中注册类型和封装问题

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