我在尝试理解在Application_Start期间被初始化(通过IoC容器)的DbContext会发生什么时遇到问题 .

该应用程序是一个MVC4,EF使用存储库,Unity作为IoC容器 . 情况如下 Global.asax

protected void Application_Start()
{
    // usual MVC init code, routes, bundles etc.

    var container = Bootstrapper.Initialise();

    ViewEngines.Engines.Clear();
    var ve = container.Resolve<AreaAwareRazorEngine>();
    ViewEngines.Engines.Add(ve);
}

AreaAwareRazorEngine 已在容器中注册 not . 该引擎需要使用DbContext来完成它的工作 . 这里的Repo和DbContext似乎被实例化为单身,从某种意义上来说,这是预期的 .

DbContext在Unity中注册了 PerRequestLifetimeManager ,因此在正常浏览网站期间,它会在提供请求时创建和处理 .

我遇到的问题是,在elmah日志文件中,我可以看到很多与通常的“DbContext已被处理......”相关的错误,我猜测会发生的事情是GC可能(在某些条件下)执行传递并处理单例存储库DbContext .

我正在考虑的一个解决方案是将ViewEngine注册放在 Application_BeginRequest 中,但我想询问社区这是一个好的做法,还是以后会引起问题 . 我无法在本地测试内容,因为一切正常并且问题仅在部署到 生产环境 时(如果它可以在IIS级别更改,则会引发问题) .