当我将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
?
答案 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>>