我有一个ASP.NET MVC应用程序,它在Global.asax的BeginRequest例程中设置一个Autofac IOCContainer。
一切正常,直到满足我的一个IIS7 UrlRwrite规则/条件,例如小写网址。我注意到,只要我在url中放置一个大写字母,所以当触发url重写规则时,就没有达到BeginRequest例程,但是EndRequest例程是。
我遇到的问题是IOCContainer永远不会在这种情况下设置,所以当EndRequest被触发并且我尝试处理web上下文/ ioc容器时,它会因为它从未在第一时间设置而出错
为什么在上述场景中永远不会达到BeginRequest,并且是否存在因此而产生的IOC问题的常见解决方法?
答案 0 :(得分:0)
作为Autofac MVC集成一部分的AutofacDependencyResolver
已经在每个HTTP请求开始时创建了一个新的生命周期范围,并在HTTP请求结束时将其处置。你不应该自己管理它。使用DependencyResolver机制时是否有此问题?
var builder = new ContainerBuilder();
builder.RegisterControllers(typeof(MvcApplication).Assembly);
var container = builder.Build();
DependencyResolver.SetResolver(new AutofacDependencyResolver(container));
您可以在Autofac wiki上找到有关MVC集成的更多信息。