使用Prism时,哪个组件负责配置容器?

时间:2015-07-20 22:24:08

标签: prism

我见过两种方法: 方法一强制Shell在编译时引用所有模块(这似乎与Prism库的模块化特性的目的相反)。在此方法中,Bootstrapper使用编译时已知的类型配置容器。

在第二种方法中,Bootstrapper配置容器以提供容器类的实例(IUnityContainer或你有什么)。这允许Shell项目对加载的模块一无所知,但强制所有模块依赖于给定的DI框架(因为prism似乎没有配置容器的通用机制)。

哪种方法更好,或者我错过了一些重要的信息?

1 个答案:

答案 0 :(得分:2)

容器中类型注册的方式取决于容器类型本身。 Prism完全支持两个容器:MEF和Unity。

您可以在Development Guide中了解类型注册:

  

使用Unity容器注册类型

     

初始化期间,a   type可以注册其他类型,例如视图和服务。   去做这个,   该类型需要将容器注入模块构造函数中。注册也可以通过配置在代码外执行。

     

使用MEF注册类型

     

MEF使用基于属性的系统   使用容器注册类型。结果,添加类型   注册到容器很简单:它需要添加    [导出] 属性类型。

因此,使用Unity有两个选择:容器引用注入和配置。对于MEF,您可以使用属性和容器注入。

如果要使用其他容器实现,例如Autofac,则必须为Prism提供适配器。

开发基于Prism的应用程序,您必须选择一种DI容器类型。因此,将所有模块与一个DI框架耦合并没有错。当然,您可以通过使用例如IServiceLocator界面。但正如Development Guide所述:

  

IServiceLocator并不意味着是通用容器。   容器具有不同的使用语义,这通常会驱动它   决定选择容器的原因。

     

在以下情况下,可能会   适合您使用IServiceLocator

     
      
  • 你是一个   独立软件供应商(ISV)设计第三方服务   需要支持多个容器。
  •   
  • 您正在设计服务   在他们使用多个容器的组织中使用。
  •