0

我有一个 ASP.NET MVC 应用程序,它在 Global.asax 的 BeginRequest 例程中设置了一个 Autofac IOCContainer。

一切都很好,直到满足我的 IIS7 UrlRwrite 规则/条件之一,例如小写 url。我注意到,只要我在 url 中放了一个大写字母,因此触发了 url 重写规则,就没有到达 BeginRequest 例程,但 EndRequest 例程是。

我遇到的问题是在这种情况下从未设置过 IOCContainer,因此当 EndRequest 被触发并且我尝试处理 web 上下文/ioc 容器时,它会出错,因为它从来没有被设置过。

为什么 BeginRequest 在上述情况下永远无法到达,是否存在针对由此产生的 IOC 问题的常见解决方法?

4

1 回答 1

0

作为AutofacDependencyResolverAutofac MVC 集成的一部分,它已经在每个 HTTP 请求开始时创建了一个新的生命周期范围,并将在 HTTP 请求结束时释放它。您不需要自己管理它。你在使用DependencyResolver机制的时候有这个问题吗?

var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

您可以在 Autofac wiki 上找到有关 MVC 集成的更多信息。

http://code.google.com/p/autofac/wiki/Mvc3Integration

于 2012-05-07T15:39:07.957 回答