我有一个具有以下项目的解决方案:
- 核心(包含用于处理的类,与业务对象/域无关)
- 域(包含业务对象)
- 线束(控制台应用程序)
- MVC4 应用程序
- 持久性(包含存储库接口、EF 映射等的实现)
- 存储库(包含存储库接口)
- 测试(包含单元测试)
我想使用 NInject 作为我的 IoC 容器,因为我有使用它的经验,但是我愿意接受更适合我需求的建议。
域对象需要了解存储库,以便他们可以进行数据访问(即,Person 类可能想要检索所有 AddressDetails)。一切都被编码为接口,以帮助单元测试中的模拟。
我不希望域项目依赖于 IoC 容器,但我需要某种方式让域项目中创建的所有实例都注入正确的存储库。我怎样才能做到这一点?我还希望能够在必要时从线束和测试项目中进行注入。我能想到的唯一方法是在 Domain 类中有一个静态对象,该对象包装来自 NInject 的 StandardKernel 并调用它来填充依赖项。如果我可以让构造函数注入工作,我认为它不会使用该方法,那也很好。我能想到的另一种选择是有一个工厂来构建具有正确依赖关系的域对象,但我宁愿能够拥有 IPerson person = new Person() 而不是每次都必须调用工厂。
提前致谢。