1

我有一个结构如下的解决方案:

  • 模型组装
  • 数据组装 - 定义存储库接口和基本存储库类
  • ORM 程序集 - 实现存储库接口并继承基本存储库类 ^
  • 业务组装 - 引用数据组装,并通过 MEF 动态拉入 ORM 对象(不显式引用 ORM 组装)
  • UI 程序集

以这种方式,如果我们决定使用其他东西,我可以轻松地更换 ORM。

我很好奇 Unity 是否可以提供类似的功能。我想将我的业务逻辑与底层 ORM 分离。根据我的阅读,统一主要在编译时工作,而 MEF 在运行时工作。话虽这么说,是否有可能以这样一种方式与统一解耦,即我的业务层没有对 ORM 的引用,而只是它从数据组装中实现的接口?Unity 如何在不引用实现程序集的情况下定义实现接口的内容?

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

4

1 回答 1

1

为了对 Unity 做同样的事情,您通常在单独的程序集中拥有 ORM 接口及其实现。

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

Project.Orm.ConcreteImplementation程序集还将使用它们实现的接口类型引用和Project.Orm.Interface注册容器中的具体类型(很像依赖代码通过请求它们实现的接口来解析类型)。

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

于 2011-04-04T13:43:31.180 回答