我使用IoC(DI)方法並且通常具有參數,這些參數是由最低層(DB層等)從配置設置(即連接字符串,靜態值等)讀取的。什麼是最好的方式來做到這一點?配置設置和IoC
直接在此閱讀的最底層,即:
string sendGridApiKey = ConfigurationManager.AppSettings["SendGridApiKey"];
它的工作原理,但還需要添加此關鍵單元測試項目的配置文件。此外,程序集取決於配置文件
- 在最高層(即web應用程序)中讀取它並從所有層中拋出參數?它會起作用,但所有的中間層都會得到參數,這些參數不會被使用(所以它們將取決於不使用的東西)。
當最低層的不同實現需要不同的參數時也存在問題。即SendMail1可以要求SMTP /登錄/密碼,但SendMail2可以只需要ApiKey,但SendMail1和SendMail2應該實現相同的接口。所以,它會造成使用方法#2的困難
謝謝您的答覆。我在問題中增加了一段。請閱讀 –
@OlegSh請添加SendMail1和2的定義,以及界面。通常很容易向具體類添加特定的參數..構造函數可以注入特定的參數 –
這對DI/IoC策略來說通常是一個很好的答案,因此您不會緊密耦合各種組件。但是這些組件本身應該負責從設置獲取配置(或者您處理配置設置)。他們可能有重載參數,但假設SendMail1和SendMail2具有相同數量的設置。也許sendmail一個是活動目錄,需要一個域,並且sendmail 2需要一些其他的auth方法(username // password // token) – Prescott