如何为 API 配置注入第二个 databaseContext

How can I inject second databaseContext for API Configuration

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

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

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

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

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

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

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 包来记录整个应用程序,是不是服务注入太多了?

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

也很抱歉英语不好。

提前致谢。

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

例如,如果您的 customerService 和 Document 服务总是在一起,请为它们创建一个聚合服务。如果您阅读 Refactoring to Aggregate Services 文档,您会了解更多。

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

我建议您使用 ConfigurationApiContextService 的界面。这样您就可以轻松测试并失去与实现的耦合。

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

所以您的销售服务与产品服务规则 (IProductService) 相结合,而不是与实施相结合。