Как я использую Виндзор для введения зависимостей в ActionFilterAttributes

Мы можем использовать рекурсию для проблем с комбинацией / перестановкой, включающую строку или целые числа.

public static void Main(string[] args)
{
    IntegerList = new List<int> { 1, 2, 3, 4 };

    PrintAllCombination(default(int), default(int));
}

public static List<int> IntegerList { get; set; }

public static int Length { get { return IntegerList.Count; } }

public static void PrintAllCombination(int position, int prefix)
{
    for (int i = position; i < Length; i++)
    {
        Console.WriteLine(prefix * 10 + IntegerList[i]);
        PrintAllCombination(i + 1, prefix * 10 + IntegerList[i]);
    }

}
17
задан Christian Dalager 16 February 2009 в 13:39
поделиться

2 ответа

Сделайте универсальный атрибут: MyFilterAttribute с ctor взятие Типа как аргумент - т.е. что-то вроде этого:

public class MyFilterAttribute : ActionFilterAttribute {
    public MyFilterAttribute(Type serviceType) {
        this.serviceType = serviceType;
    }

    public override void OnActionExecuting(FilterExecutingContext c) {
        Container.Resolve<IFilterService>(serviceType).OnActionExecuting(c);
        // alternatively swap c with some context defined by you
    }

    // (...) action executed implemented analogously

    public Type ServiceType { get { return serviceType; } }
    public IWindsorContainer Container { set; get; }
}

Затем используют тот же подход в качестве этих двух статей, к которым Вы обращаетесь, чтобы взять под свой контроль, как действия вызываются и делают ручную инжекцию Вашего WindsorContainer в атрибут.

Использование: [MyFilter (typeof (IMyFilterService))]

Вашим фактическим фильтром затем будет в реализации класса IMyFilterService, который в свою очередь должен реализовать IFilterService, который мог выглядеть примерно так:

public interface IFilterService {
    void ActionExecuting(ActionExecutingContext c);
    void ActionExecuted(ActionExecutedContext c);
}

Этим способом, которым Ваш фильтр даже не будет связан с ASP.NET MVC и Ваш атрибут, является просто часть метаданных - способ, которым это, как на самом деле предполагается! :-)

10
ответ дан 30 November 2019 в 12:51
поделиться

Когда мне это было нужно, я опирался на работу другие сделали с Ninject и Windsor, чтобы получить зависимости внедрения свойств от моих ActionFilters .

18
ответ дан 30 November 2019 в 12:51
поделиться
Другие вопросы по тегам:

Похожие вопросы: