Одна структура для внедрения зависимостей (в приложении MVC) и для простой задачи AOP (с использованием атрибутов) - PullRequest
3 голосов
/ 26 марта 2011

Я пришел к тому, что я хочу выполнить 2 задачи в своем приложении ASP.NET, которые могут быть выполнены с использованием некоторой инфраструктуры AOP, но они имеют различную природу:

  1. Внедрение зависимостей для моих контроллеров и сервисов
  2. Я создал собственный атрибут NotNullAttribute и пометил его некоторыми параметрами или свойствами метода вместо того, чтобы выдавать ArgumentNullException, если эти параметры или свойства были нулевыми. Я хочу, чтобы AOP Framework проверил эти атрибуты во время компиляции и вместо этого добавил причины броска. Пример следует:

    //original code that I write
    public void MyMethod([NotNull]string param1){
        //do something
    }
    

    .

    //code actually being compiled - after AOF processing/weaning  
    public void MyMethod(string patam1){
        if(param1 == null){
            throw new ArgumentNullException("param1");
        }
        //do something
    }
    

Так что мне нужен фреймворк (даже не обязательно должен быть AOP, но, думаю, так и должно быть), который позволил бы мне просто выполнить обе эти задачи.

У меня есть некоторые дополнительные требования:

  • небольшая площадь, 1 или 2 сборки
  • интеграция с VS - я просто хочу нажать Ctrl+F5 для компиляции, и фреймворк работает, внедряет зависимости, добавляет код выдачи исключений без , который я даже не знаю об этом. Я не хочу запускать предварительную компиляцию из командной строки или чего-то в этом роде.
  • для генерации кода, генерирующего исключение, я бы хотел написать классы. Нравится обычные аспекты. Не XML, нет конфигурации (соглашения приемлемы). Для внедрения зависимостей я также предпочитаю классы, но XML или другой файл конфигурации приемлем, но он должен быть достаточно простым для использования кем-то, кто действительно не знает XML и ему не очень нравится.

Есть ли такие рамки? Если есть еще какие у них плюсы / минусы?


РЕДАКТИРОВАТЬ: О, да, я забыл очень важный думать: рамки должны быть бесплатно.

1 Ответ

5 голосов
/ 26 марта 2011

У меня нет личного опыта с этим, но я думаю, Линьфу соответствует вашему описанию.

Кроме того, вы можете получить AOP-подобное поведение из DI-контейнеров с динамическим перехватом - вот пример: http://blog.ploeh.dk/2010/09/20/InstrumentationWithDecoratorsAndInterceptors.aspx

Следующие DI-контейнеры поддерживают перехват из коробки:

Чистый AOP (без DI) можно получить с помощью PostSharp .

...