2012-02-08 16 views
1

我沒有發現這個問題的簡短形式爲主題...如何在已解析實例的相同激活過程中注入依賴項?

是否有可能將已解析的實例的屬性注入到依賴實例的構造函數?

我的問題來自MVC tutorial,創建於2009年。 它似乎是對我的循環依賴。

反正,我可以:

  • 搶解決的ContactController(或它的基本控制器,清單3)實例的屬性的ModelState
  • ,並將它注入到其依賴的ContactService(清單4)實例依賴ModelStateWrapper(清單7.)
  • 作爲構造函數參數。

_service = new ContactManagerService(new ModelStateWrapper(this.ModelState));

如何實現上述用DI容器線(清單8.之後)?

我知道在服務層中發生的驗證可以通過數據註釋或自定義屬性來完成,我的問題並不是關於設計或架構,而是可能性。

我已經閱讀Ninject wiki,一些博客文章,答案,甚至發現有些類似的情況,但並不完全像這樣,或者無法弄清楚如何實現這一點,或者可能與Ninject完全相同。

BR,

回答

1

不,你不能

要見你必須考慮到其中的對象創建

var modelStateWrapper = new ModelStateWrapper(); 
var service = new ContactService(modelStateWrapper); 
var controller = new ContactController(service); 

這意味着ModelState中包裝創建長期的順序問題在控制器之前,因此不可能將模型狀態傳遞給ModelStateWrapper的構造函數。唯一可行的是在某處使用屬性注入,但這只是解決實際問題的一種解決方法,因爲它具有循環依賴性。

該實現還將服務緊密地連接到控制器。考慮使用ModelValidators來代替。