我有一個遺留的Web.Forms應用程序被部分重寫爲MVC。 MVC部分使用autofac作爲依賴注入容器。Autofac,MVC(帶有ActionFilters),Web.Forms - 依賴關係解析衝突
MVC部分有定義的自定義過濾器:
public class CustomActionFilter : ActionFilterAttribute
{
protected ILogger Logger { get; set; }
public CustomActionFilter(ILogger logger) { Logger = logger; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
Logger.Log("OnActionExecuting");
}
}
時Web.Forms集成在web.config中被禁用,它工作正常。 Hovewer,當我嘗試使用Web.Forms autofac集成時,我在NullReferenceException中遇到了有關AutofacFilterProvider
在autofac內部(stack trace)中的某處。
- 的Global.asax.cs:http://pastebin.com/437Tnp0t
- 的web.config:http://pastebin.com/5pU6SH6c
注意CustomActionFilter
被註冊爲全局過濾器,因此它與autofac註冊:
public class FilterConfig
{
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(DependencyResolver.Current.GetService<CustomActionFilter>());
}
}
我試過了:
-
同樣的結果
- 使用屬性注入,而不是構造 - - 使用MVC單獨的容器和Web.Forms
- 相同的結果
- 明確觸發web.forms頁面依賴分辨率(如this) - 工作
所以,問題是,有沒有辦法爲MVC和web.forms部分提供幕後依賴解析。我是新來的autofac和一般的依賴注入容器有點新,所以我可能會錯過一些明顯的東西。
更新:錯誤與自定義過濾器無關。如果我刪除對自定義過濾器的所有引用,則錯誤行爲仍然相同,即使是堆棧跟蹤也是如此。
如果您註釋掉'ContainerDisposalModule'並且之後重新啓用'PropertyInjectionModule'和'AttributedInjectionModule',會發生什麼? 'ContainerDisposalModule'不應該被需要,因爲Autofac.MVC包含一個新的'RequestLifetimeHttpModule',這個'RequestLifetimeHttpModule'放置了請求期間創建的Lifetimscope ... – nemesv
@nemesv同樣的結果。 – J0HN
好吧,我現在看到了什麼問題......你有服務註冊'InstancePerHttpRequest'嗎? – nemesv