我想在一个Web应用程序使用AutoFac。 我有根容器,每节子容器和每个请求的子容器。 我试图找出/ A最好的办法就是管理这些寿命范围是什么。 在Global.asax.cs中我已经添加了以下内容:
protected void Application_Start(object sender, EventArgs e)
{
var container = ...;
}
protected void Session_Start(object sender, EventArgs e)
{
var sessionScope = container.BeginLifetimeScope("session");
Session["Autofac_LifetimeScope"] = sessionScope;
}
protected void Application_BeginRequest(object sender, EventArgs e)
{
var sessionScope = (ILifetimeScope) Session["Autofac_LifetimeScope"];
var requestScope = sessionScope.BeginLifetimeScope("httpRequest");
HttpContext.Current.Items["Autofac_LifetimeScope"] = requestScope;
}
protected void Application_EndRequest(object sender, EventArgs e)
{
var requestScope = (ILifetimeScope)HttpContext.Current.Items["Autofac_LifetimeScope"];
requestScope.Dispose();
}
protected void Session_End(object sender, EventArgs e)
{
var sessionScope = (ILifetimeScope)Session["Autofac_LifetimeScope"];
sessionScope.Dispose();
}
protected void Application_End(object sender, EventArgs e)
{
container.Dispose();
}
我怎么能告诉AutoFac用我的requestScope为出发点越来越依赖关系,让我注册为InstancePerLifetimeScope的实现会用我的requestScope解决?
如果这是不可能的,我能得到AutoFac创造了每个请求的生命周期范围从我sessionScope的?
还是我在错误的轨道在这里? 莫不是让AutoFac知道这个层次的其他方式?
任何帮助或其他意见的赞赏。
为了应对史蒂芬。
我仍然在原型的早期阶段,但有可能的事情,你可以有在sessionScope:
- 使用UserPreferences
- 身份验证和授权范围内(例如,用户身份和角色)
不相关的,我要建立的应用程序,但在电子商务环境下,购物车可能是会话范围。 这可能是最好的具体例子。 这是你的预期寿命长于要求的东西,但短于应用程序。
可能有比这更多,但如果我对使用UserPreferences,认证和授权的策略,则该策略也被应用到后面将要创建的其他组件。
另一种可能是在请求开始获得所有必要的信息,并在请求范围内将这些配置的组件。 它将给我结果我期待,但它并没有对应用程序 - >会话级>请求层次我的模型在我的脑海匹配。 我希望创建一个系统,是有道理的,因为我绝对不会说是要保持它的人。