私は、MVCに部分的に書き直された従来のWeb.Formsアプリケーションを持っています。 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の自動ファクシミリの統合を使用しようとすると、に関連するNullReferenceExceptionが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>());
}
}
私は試しました:
-
同じ結果代わりコンストラクタの
- 使用プロパティインジェクション - - 同じ結果
- が明示的(thisなど)web.formsページの依存関係の解決をトリガ - MVCとWeb.Formsための別々の容器を用いて
- は
働いしたがって、問題は、MVCとweb.formsの両方のパートの背後にある依存関係解決を提供する方法があることです。私はオートファックには新しく、一般的には依存性注入容器に少し新しかったので、明らかに何かを見逃すかもしれません。
更新:エラーは、カスタムフィルタとは関係ありません。カスタムフィルタへの参照をすべて削除しても、バグの振る舞いはスタックトレースでも同じです。
あなたが 'ContainerDisposalModule'をコメントアウトした後、' PropertyInjectionModule'と 'AttributedInjectionModule'を再び有効にするとどうなりますか? Autofac.MVCにはリクエスト中に作成されたLifetimscopeを廃棄する新しい 'RequestLifetimeHttpModule'が含まれているため、' ContainerDisposalModule'は必要ありません。 – nemesv
@nemesv同じ結果。 – J0HN
OK、問題が何であるか分かります。あなたは 'InstancePerHttpRequest'で登録されたサービスを持っていますか? – nemesv