2011-03-26 17 views
3

我已經到了要在我的ASP.NET應用程序中完成2個任務的地步,這兩個任務都可以使用一些AOP框架完成但它們都是不同的性質:依賴注入(在MVC應用程序中)和簡單的AOP任務(使用屬性)的一個框架

  1. 依賴注入我的控制器和服務
  2. 我已創建自定義屬性NotNullAttribute,標誌着一些方法的參數或屬性與它,而不是拋出ArgumentNullException如果這些參數或特性的爲空。我希望AOP框架在編譯時檢查這些屬性,並添加拋出原因。示例如下:

    //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但不真正喜歡它的人使用。

有沒有這樣的框架?如果還有更多,他們有什麼優點/缺點?


編輯:噢,是我忘了很重要的想:框架應該是免費的。

回答

5

我沒有任何個人經驗,但我認爲Linfu符合你的描述。

除此之外,你可以從DI容器獲得AOP類似的行爲與動態攔截 - 這裏有一個例子:http://blog.ploeh.dk/2010/09/20/InstrumentationWithDecoratorsAndInterceptors.aspx

以下DI容器支持攔截開箱:

純AOP(無DI)可與PostSharp一起使用。

+0

謝謝你的幫助。 PostSharp是第一個嘗試過的T,但它不是免費的...... – drasto 2011-03-26 13:08:56

+0

@drasto:PostSharp有一些重要的部分,上次看起來非常自由 - 它並不是一瘸一拐的品嚐者,在這個空間中考慮非常重要;付費位是非常強大的東西,超越了核心AOP(Eve,如果你真的可以在你的上下文中正確使用,我只是不喜歡你表達你的錯誤!) – 2011-03-28 23:22:49

+0

同意@drasto,PostSharp的免費位更多不足以完成你想要做的事情,並且是由一個非常堅實的框架。在網站上也有很多很好的例子。 – Perry 2011-04-12 02:08:12