我目前正在尝试使用依赖注入(使用Ninject)来“结合”DDD模式,但我觉得这样做违反了基本原则。
我有一个控制台应用程序,它在OWIN之上托管NancyFX web框架,以提供配置接口。我的项目结构如下:
Infrastructure
- Infrastructure.Core
- Repositories
- Mappings
- Infrastructure.Media
- Media Services
Core
- Logging & Exception-Handling intercaces
Domain
- Entities
- Repositories
- Services
App
- Main application
Web
- Web Frontend (Nancy Modules, Models etc.)既然我是DIying (呵呵.)在所有地方(将上下文注入存储库,解析单例服务.),我在我的App项目中创建了一个静态类,该类创建了一个IKernel实例,并在应用程序启动时注册了所有依赖项。
我有一些将在Nancy和自托管Web控制器中访问的存储库,现在我面临的第一个问题是当我想在“每个请求”生命期内注册存储库时: IKernel.Bind().PerRequest()只能在依赖于Microsoft.Web.Infrastructure等的Ninject.Web.Common包中使用。等等。最后,我将在一个基本不了解我的web框架或API的组件中创建web特定包的依赖项(除了配置OWIN)。
此外,通过将域存储库和服务接口绑定到来自基础结构层的具体实现,我根据实现来制作我的应用程序,这是不太正确的。
我怎样才能解决这些问题?
发布于 2014-03-03 16:15:52
你听说过成分根吗?您只在最上面的项目中注册特定的实现,例如web应用程序。在任何其他地方,您都可以针对接口进行代码编写。
听起来这是你自己发明的,我真的感觉不到问题--因为这是引用所有东西的最重要的项目,包括web、owins、ninjects和其他,这里真的应该没有问题。
我的建议是永远不要用单身汉。相反,可以使用工厂或本地依赖解决程序。解析器是本地基础结构的一部分,它充当在孤立子系统中创建服务的中心。解析器可以由其周围的环境安全地使用,它不引用任何东西,但是它有一个可配置的提供程序,该在复合根中再次设置。
这样,如果解析器使用特定的实现,甚至是特定的DI容器,那么它将在最上面的项目中全部设置。
https://stackoverflow.com/questions/22151481
复制相似问题