生命周期范围在Application_Start中是什么意思

时间:2019-02-14 20:23:43

标签: asp.net-mvc dependency-injection autofac

当我将DbContext的Autofac配置为“生存期范围”时,则在请求范围内,这意味着它将在请求结束时被丢弃。

但是,当我们在MVC应用程序的DbContext方法中从容器中获取Application_Start()时会发生什么呢?

我们有一个设置为单例的设置类:

builder.RegisterType<Settings>().As<ISettings>().SingleInstance();

Application_Start()中,我们从容器中获取设置:

var settings = DependencyResolver.Current.GetService<ISettings>();

Settings类依赖于DbContext-DbContext是在生命周期范围内设置的

我们知道这是一个captive dependency,但不要认为这是个问题,因为该类仅使用一次上下文。

我担心的是DbContext是否曾经释放过资源。

Application_Start()中,我们属于请求范围还是属于应用程序范围?

如果我们处于应用程序范围内,那么“生命周期范围”是否意味着在应用程序停止之前我们不会处置DbContext

1 个答案:

答案 0 :(得分:1)

将释放资源(在您的情况下为应用程序范围)之一,因此在应用程序停止时将释放资源。

在这种情况下,我将使用def waitforload(): wait.until(lambda d: d.execute_script( 'return (document.readyState == "complete" || document.readyState == "interactive")')) def twoclicks(idoutter, idinner): wait.until(EC.element_to_be_clickable((By.XPATH, "//input[contains(@id," + idoutter + ") and @value='...']"))).click() waitforload() wait.until(EC.element_to_be_clickable((By.ID, idinner))).click() waitforload() ,诸如此类:

Func<Owned<DbContext>>