我有一个像这样的解决方案:
以这种方式,如果我们决定选择别的东西,我可以轻松换掉ORM。
我很好奇是否可以与Unity有类似的功能。我想将我的业务逻辑与底层ORM分离。从我读过的,unity主要在编译时工作,MEF在运行时。话虽如此,是否有可能以统一的方式解除统一,即我的业务层没有引用ORM,而只是它从数据汇编中实现的接口? Unity如何定义实现接口的内容而不引用实现程序集?
目前,使用MEF,没有任何程序集具有对ORM的引用(除了业务层在运行时动态地将其拉入以发现部件并使用对象填充接口时)。我更愿意继续沿着这些方向努力,并想知道我是否可以用Unity做到这一点。
答案 0 :(得分:1)
要对Unity执行相同操作,通常会在单独的程序集中使用ORM接口及其实现。
例如,在Project.Orm.Interface
程序集中,您将定义任何ORM必须实现的接口;您解决方案的其余部分将引用Project.Orm.Interface
。这样,您的应用程序的任何部分都不会引用任何具体的ORM实现。
Project.Orm.ConcreteImplementation
程序集也会引用Project.Orm.Interface
并使用它们实现的接口类型在容器中注册具体类型(很像依赖代码通过询问它们实现的接口来解析类型)。
在Prism的上下文中,会有一个动态发现的IModule
加载Project.Orm.ConcreteImplementation
并在模块初始化时注册容器中的类型。