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

时间:2016-03-26 14:37:30

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

我正在建立一个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;)

抱歉英语也不好。

提前致谢。

1 个答案:

答案 0 :(得分:0)

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

例如,如果您的customerService和Document服务始终在一起,请为他们创建一个aggreate服务。如果您阅读Refactoring to Aggregate Services文档,您会了解更多信息。

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

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

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

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