我的C#Web应用程序首先使用实体框架7代码。 DbContext
的作用域是HTTP请求的生命周期。有一个UnitOfWork
类包装这个DbContext
。这被注入到大多数需要在数据库上执行Crud操作的服务中。IoC容器 - 仅为特定服务注入新的DbContext实例
该应用程序还有一个AuditService
它用于在抛出异常时审计错误。我不想将范围限定为HTTP请求的DbContext
注入到此服务中,因为如果抛出异常,我只想将审计条目保存到数据库并忽略任何其他未决更改。因此在这种情况下注入一个新的实例UnitOfWork
/DbContext
是有意义的。
是否有可能配置IoC容器,以便当UnitOfWork
注入AuditService
,应该实例化的UnitOfWork的新实例(包起来的DbContext
的新实例)?但是对于所有其他服务,应该注入作用域为HTTP请求的UnitOfWork
/DbContext
而不是?
我使用的是Microsoft内置的IoC容器,它附带了ASP.NET Core,但使用其他IoC容器(例如StructureMap)的示例也会有所帮助。
因为你'AuditService'就是这样一个特定的适配器,我可能会让它创建和处置'DbContext'在内部;所以根本不需要注入'DbContext'。这将使事情变得非常明确并简化您的配置。 – Steven