31

私はこのようなフィルターを持っています:

public class CustomFilterAttribute : ActionFilterAttribute, IAuthorizationFilter
{
    public MyPropery Property { get; set; }
    ....
}

プロジェクト内のすべてのアクションに対して実行する必要があります

GlobalFiltersに登録しようとしましたが、プロパティが挿入されません

このソリューションを試してフィルターを登録しましたが、呼び出されません

それを行う方法について何かアイデアはありますか?

4

2 に答える 2

17

これを行うには、Peteのソリューションを使用する必要があります。更新されたソリューションを提供してくれた彼に感謝します。

私はついにそれを作りました、これがそれをする方法です:

まず、すべての依存関係を持つコンストラクターを使用して属性を作成します

public class CustomFilterAttribute : ActionFilterAttribute, IAuthorizationFilter
{
    private IProperty _property;

    public CustomFilterAttribute(IProperty repository)
    {
        _property = property;
    }
    ....
 }

autofacに必要なものをすべて登録します

var builder = new ContainerBuilder();
builder.RegisterControllers(Assembly.GetExecutingAssembly());

builder.RegisterType<MyProperty>().As<IProperty>();
builder.RegisterType<CustomFilterAttribute>().SingleInstance();

builder.RegisterFilterProvider();

IContainer container = builder.Build();

DependencyResolver.SetResolver(new AutofacDependencyResolver(container));

そのようなグローバルフィルターを登録する

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    filters.Add(DependencyResolver.Current.GetService<CustomFilterAttribute>());
}

global.asaxで、最初にAutofacを登録し、次にグローバルフィルターを登録するようにしてください。

これで、プロパティインジェクションはもう必要ありません。コンストラクターインジェクションは正常に機能します。これは良いことです。

于 2012-11-12T17:07:01.070 に答える