首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DDD和依赖注入

DDD和依赖注入
EN

Stack Overflow用户
提问于 2014-03-03 16:04:21
回答 1查看 2.5K关注 0票数 3

我目前正在尝试使用依赖注入(使用Ninject)来“结合”DDD模式,但我觉得这样做违反了基本原则。

我有一个控制台应用程序,它在OWIN之上托管NancyFX web框架,以提供配置接口。我的项目结构如下:

代码语言:javascript
复制
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)。

此外,通过将域存储库和服务接口绑定到来自基础结构层的具体实现,我根据实现来制作我的应用程序,这是不太正确的。

我怎样才能解决这些问题?

EN

回答 1

Stack Overflow用户

发布于 2014-03-03 16:15:52

你听说过成分根吗?您只在最上面的项目中注册特定的实现,例如web应用程序。在任何其他地方,您都可以针对接口进行代码编写。

听起来这是你自己发明的,我真的感觉不到问题--因为这是引用所有东西的最重要的项目,包括web、owins、ninjects和其他,这里真的应该没有问题。

我的建议是永远不要用单身汉。相反,可以使用工厂或本地依赖解决程序。解析器是本地基础结构的一部分,它充当在孤立子系统中创建服务的中心。解析器可以由其周围的环境安全地使用,它不引用任何东西,但是它有一个可配置的提供程序,该在复合根中再次设置。

这样,如果解析器使用特定的实现,甚至是特定的DI容器,那么它将在最上面的项目中全部设置。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22151481

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档