棱镜 - 相当于MEF功能的Unity?

时间:2011-04-04 13:27:15

标签: unity-container prism mef decoupling

我有一个像这样的解决方案:

  • 模型汇编
  • 数据汇编 - 定义存储库接口和a 基础存储库类
  • ORM组装 - 实现存储库接口&继承 基础存储库类^
  • 商业 装配 - 有参考 数据汇编,并动态拉取 在ORM对象中通过MEF(没有 明确引用ORM 装配)
  • UI程序集

以这种方式,如果我们决定选择别的东西,我可以轻松换掉ORM。

我很好奇是否可以与Unity有类似的功能。我想将我的业务逻辑与底层ORM分离。从我读过的,unity主要在编译时工作,MEF在运行时。话虽如此,是否有可能以统一的方式解除统一,即我的业务层没有引用ORM,而只是它从数据汇编中实现的接口? Unity如何定义实现接口的内容而不引用实现程序集?

目前,使用MEF,没有任何程序集具有对ORM的引用(除了业务层在运行时动态地将其拉入以发现部件并使用对象填充接口时)。我更愿意继续沿着这些方向努力,并想知道我是否可以用Unity做到这一点。

1 个答案:

答案 0 :(得分:1)

要对Unity执行相同操作,通常会在单独的程序集中使用ORM接口及其实现。

例如,在Project.Orm.Interface程序集中,您将定义任何ORM必须实现的接口;您解决方案的其余部分将引用Project.Orm.Interface。这样,您的应用程序的任何部分都不会引用任何具体的ORM实现。

Project.Orm.ConcreteImplementation程序集也会引用Project.Orm.Interface并使用它们实现的接口类型在容器中注册具体类型(很像依赖代码通过询问它们实现的接口来解析类型)。

在Prism的上下文中,会有一个动态发现的IModule加载Project.Orm.ConcreteImplementation并在模块初始化时注册容器中的类型。