通过依赖项注入使用异步控制器时dbContext的生存期

时间:2014-06-23 23:02:17

标签: c# asp.net-mvc-4 asynchronous dependency-injection autofac

过去,我使用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 不受更改处理请求的线程的影响吗?

0 个答案:

没有答案