c# - 如何为 API 配置注入(inject)第二个 databaseContext

标签 c# dependency-injection asp.net-web-api2

我正在构建 WebApi,我有一些问题...

我为每个请求创建了服务,例如产品、客户、销售等。每个服务都会注入(inject)从基础存储库继承的存储库表,例如:

public ProductService(IProductRepository productRepository,
                      IProductPriceRepository productPriceRepository,
                      IProductProviderRepository productProviderRepository)
{
}

例如,SaleService 需要其他服务,例如:

public SalesService(IDocumentService documentService,
                    ICustomerService customerService,
                    IProductService productService)
{   
}

或多或少这就是我的应用程序的架构。 问题是我需要另一个数据库上下文来配置 API,如何在不使注入(inject)冗余的情况下正确地做到这一点?喜欢:

public ProductService(IProductRepository productRepository,
                      IProductPriceRepository productPriceRepository,
                      IProductProviderRepository productProviderRepository,
                      ConfigurationApiContextService configurationApicontextService)
{
}
public SalesService(IDocumentService documentService,
                    ICustomerService customerService,
                    IProductService productService,
                    ConfigurationApiContextService configurationApicontextService)
{           
}

我使用的是 IoC Unity。 这是向服务添加另一个 dataContext 的正确方法吗?是否可以让整个应用都可以全局访问新的 dataContext?

如果这是一个正确的方法,如果以后我想添加 log4net 包来记录整个应用程序,是否有太多的服务注入(inject)?

抱歉这些问题,刚开始使用 WebApi ;)

也很抱歉英语不好。

提前致谢。

最佳答案

你的构造函数不应该有很多参数。但是你有4个参数,所以没关系。您可以使用 Aggregate Services结合服务(如果它们具有逻辑或心理关系,则结合)。

例如,如果您的 customerService 和 Document 服务始终在一起,请为它们创建一个聚合服务。如果你阅读 Refactoring to Aggregate Services文档你会更明白。

但据我所知,您已经在您的产品服务上这样做了。

我建议您使用ConfigurationApiContextService 接口(interface)。这样您就可以轻松地进行测试并失去与实现的耦合。

您不能与规则(接口(interface))松耦合,但可以与依赖注入(inject)中的实现松耦合。此外,您决定在顶层而不是在中间或底部(控制反转)实现。

因此,您的销售服务与产品服务规则 (IProductService) 相结合,而不是与实现相结合。

关于c# - 如何为 API 配置注入(inject)第二个 databaseContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36236555/

相关文章:

c# - 将消息定向给消费者

c# - 构造函数注入(inject) (DI) 与静态工厂的横切问题?

c# - Webapi获取不记名 token

.net - 如何在不使用服务定位器模式的情况下使用具有依赖注入(inject)的工厂

asp.net-mvc - Unity 依赖注入(inject) - 如何在 .config 中注册实例?

iis - WebApi2 + CORS + OWIN 失败 IIS 8.5

c# - 无法使用 EF6 在 mysql 数据库上查询或插入

c# - 从事件触发器内更改属性

c# - 按照 MVVM 设计模式从 ViewModel 访问 this.content

单击事件的 C# 表单应用程序