继this问题后,我现在有以下结构:
Wolfie.Core - 包含业务逻辑&实体,还包含存储库接口(例如IUserRepository)需要访问存储库的类正在使用构造函数注入。
Wolfie.Data - 引用Wolfie.Core并有一个实现IUserRepository的UserRepository
所以到目前为止我很满意。 Core对数据实现一无所知,因此不依赖于任何内容。
我遇到的绊脚石在我的网络层。
我的Web项目引用了我的Core项目。然后我可以创建一个Core类,比如User,但是我必须将IUserRepository的具体实现传递给它。所以我需要在我的Web项目中引用我的Data项目,这似乎是错误的。它现在看起来似乎Web依赖于数据,它不应该是。
那么,如何在没有直接引用数据的情况下将我的Core User类注入Data类?
期待您的帮助。
答案 0 :(得分:1)
您可以绑定到主应用程序代码中的接口,仅引用合同程序集(“Core”程序集)。然后使用反射在运行时加载依赖项并注入具体的类。
有一些问题需要解决:
这些问题可以通过多种方式解决,是不同依赖注入库之间的主要区别因素之一。
有些使用顶级配置代码或配置代码模块(例如NInject),有些使用XML配置(例如Unity),有些使用基于属性/约定的自动发现机制(用于例如MAF / MEF),有些人使用所有这些的组合(例如Castle.Windsor)。
大多数或所有这些图书馆都支持每种机制,但我已经提到了最突出的重点。