过去,我使用AutoFac将EntityFramework数据库上下文注入 InstancePerRequest 计划中的各种服务。
builder.RegisterType<MyDataContext>()
.As<IDataContext>()
.As<IUnitOfWork>()
.InstancePerRequest();
这使我能够在将多个服务注入控制器时共享服务上下文。
// Note each of these services take a IDataContext via constructor injection
public FilesController(
IAnalysisService analysisService,
IUserService userService)
{
}
我有一个动作过滤器,在每个动作请求结束时提交我的上下文(我可能正在考虑更改此内容,但现在它符合我对此问题的目的)。
public class UnitOfWorkActionAttribute : ActionFilterAttribute
{
public IUnitOfWork UnitOfWork { get; set; }
public override void OnActionExecuted(ActionExecutedContext filterContext)
{
UnitOfWork.SaveChangesAsync().WaitAndUnwrapException();
}
}
我在MVC中读取异步是因为在使用await
时释放请求的线程被释放,所以启动请求的线程无法保证完成。
在AutoFac注入中,这意味着注入 ActionFilterAttribute 的 UnitOfWork 实例可能与注入Controller的实例不同,或者 InstancePerRequest 不受更改处理请求的线程的影响吗?