1

こんにちは、MVC 3 アプリケーションでMS Unity Containerを使用しています。

セッター注入を使用して、アクション フィルターの依存関係を注入したいと考えています。global.asax に登録しているアクション フィルターがあり、このアクション フィルターはリポジトリ クラスを呼び出してデータをロードします。DIを使用して具象クラスを注入したい。StructureMap を使用すると、非常に簡単に実現できます。しかし、どういうわけか、Unityで動作させることができません。このリンクからすべてのソリューションを試しました。

これが私のコードです:

MyActionFilter.cs

public class GlobalViewBagActionFilter : ActionFilterAttribute
{
    public IUserRepo UserRepo { get; set; }

    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        var testVal = UserRepo.LoadData();
    }
}

Global.asax.cs にアクション フィルターを登録する

private static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new GlobalViewBagActionFilter());
    }

Appliation_Start で上記のメソッドを呼び出して登録する

RegisterGlobalFilters(GlobalFilters.Filters);

クラスを登録するために考えられる多くのコード ブロックを試しましたが、何も機能しませんでした。例外が発生するか、アクション フィルターで UserRepo プロパティが null になります。

どうすればそれを機能させることができますか?

4

1 に答える 1

1

コンテナをセットアップする必要があります。

private static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    var container = new UnityContainer()
       .RegisterType<IUserRepo, UserRepoImpl>()

       .RegisterType<GlobalViewBagActionFilter>(
           new InjectionProperty("UserRepo", new ResolvedParameter<IUserRepo>()) 
       );


    filters.Add(container.Resolve<GlobalViewBagActionFilter>());
}
于 2012-08-21T06:32:19.603 に答える