C# IModule中的类型注册与封装问题
common Prism设计复杂应用程序的方法是让每个实现IModule接口的模块初始化自己以使其能够工作。 在大多数情况下,这种“初始化”主要是关于向IoC容器注册某些类型。因此,在我们的例子中,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
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。