2012-11-01 44 views
1

我有一個asp.net的WebAPI項目,我是能夠做到的控制器我可以讓ninject實例化postsharp方面嗎?

[Audit("Getting all foos")] 
public IEnumerable<Foo> GetAll() 
{ 
    return _fooService.GetAll(); 
} 

縱橫/屬性我已經創建了被稱爲審計中對這些方法的一些方面的導向編程。我使用ninject創建對象,但在其他地方,但各方面只是自行創建。

這會導致兩個問題,首先我不能將屬性注入到方面,因此必須在方面內手動創建對象。

其次,因爲我不能夠覆蓋創建審計方面這樣一個實際的測試,而不是嘲笑一個過程中創建的創建行爲,它是打破我的單元測試。

我沒有很多與國際奧委會的經驗或ninject所以說實話我得到自己有點混淆。

有沒有辦法來強制通過ninject這些方面創造?


我使用的是最新版本的所有庫是否有幫助。

我也碰到Ninject Intercept,但似乎更喜歡另類postsharp儘管我可能是很錯了。

回答

4

上一頁下一頁尾頁編輯修改您的代碼。 Ninject無法通過這種方法傳遞依賴關係。但有一些事情可以做:

  1. 對於需要依賴關係的方面使用Ninject截取。這工作方式不同。 Ninject將動態創建一個裝飾器類,並在調用之前和之後調用您的方面。這樣它可以傳遞一些依賴關係。

  2. 方面通常用於橫切關注。在這些情況下,爲依賴關係創建環境上下文是完全合理的。這是一個靜態類,它只提供一種依賴關係,例如IAuditLog。

public static class AuditLogProvider 
{ 
    public static AuditLog 
    { 
     get { return autitLog; } 
     set { 
       if (this.auditLog != null) throw new InvlaidOperationExcpetion("Audit is already configured"); 
       this.auditLog = value; 
      } 
    } 
} 

在你的引導程序,你現在可以初始化環境方面:

AuditLogProvider.AutitLog = kernel.Get<IAuditLog>(); 
+0

你有PostSharp多少經驗?你認爲在這種情況下使用它還是值得的,或者只是寫一些我們自己的方面? – Neil

相關問題