我正在构建 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/