2012-02-10 116 views
0

this問題繼而,我現在有以下結構:參考VS依賴

Wolfie.Core - 包含業務邏輯&實體,也包括庫接口(例如IUserRepository)需要訪問存儲庫使用類構造函數注入。

Wolfie.Data - 參考Wolfie.Core並具有實施IUserRepository

一個UserRepository所以我很高興這個至今。 Core不知道數據實現的任何內容,因此不依賴於任何內容。

我遇到的絆腳石是在我的Web層。

我的Web項目引用了我的Core項目。然後我可以創建一個Core類,比如User,但我必須將IUserRepository的具體實現傳遞給它。所以我需要在我的Web項目中引用我的Data項目,這看起來不對。它現在看起來像Web依賴於Data,它不應該是。

那麼,如何注入我的核心用戶類與數據類沒有直接引用數據?

期待您的幫助。

+0

相關:http://stackoverflow.com/questions/5267525/dal-bll-gui-composition-root-how-to-setup-di-bindings/5270734#5270734 – 2012-02-10 15:54:28

回答

1

您可以綁定到主應用程序代碼中的接口,僅引用合約程序集(「Core」程序集)。然後使用反射在運行時加載您的依賴關係並注入具體的類。

有一些需要解決的幾個問題:

  • 你將如何找到需要的組件?
  • 一旦你找到你的裝配體,你應該使用什麼具體的類?
  • 你會如何寬鬆地配置你的應用程序來使用這些程序集和那些具體的類?您不想簡單地將您的硬編碼組件參考和具體類參考轉換爲硬編碼組件和類名稱字符串...

這些問題可以通過許多不同的方式解決,的不同依賴注入庫之間的主要區別因素。

有些使用頂級配置代碼或配置代碼模塊(例如NInject),有的使用XML配置(例如Unity),有的使用的自動發現機制基於屬性/約定(例如MAF/MEF),和有些使用所有這些的組合(例如Castle.Windsor)。

大多數或所有這些庫支持每種機制,但我已經提到了最突出的焦點。