2016-09-13 322 views
1

我試圖找到我如何使用依賴注入來注入的ConnectionString或自定義AppSetting對象到目前爲止使用我結束了在啓動依賴注入

services.Configure<IConnectionStrings>(Configuration.GetSection("MyConnection")); 

例如層

  • 的Web MVC應用程序
  • 業務邏輯(類庫)
  • 庫(類庫)
  • DAL(類庫)
  • 模型(類庫)

其中網看到的只是業務邏輯等方面,對模型可用於所有。

在DAL項目中,我有一個對象負責連接和運行對我的數據庫(CDbTools對象)的查詢。

現在,我怎樣才能直接注入CDbTools,而無需從控制器下降到DAL。

謝謝。

+0

請提供[最小,完整和可驗證示例](http://stackoverflow.com/help/mcve)。 –

回答

0

我相信你應該添加到您的ConfigureServices方法:

services.Configure<CustomSettings>(settings => 
{ 
    Configuration.GetSection("CustomSettings").Bind(settings); 
}); 

在哪裏服務,是您IServiceCollection對象,CustomSettings是要注入您的自定義配置類。該自定義對象應映射到您的設置字段。

希望這會有所幫助!

+0

這是如何照顧將它傳遞給我的自定義對象?因爲我在Ctor中添加它不會編譯,因爲我需要將它從控制器一直傳遞到DAL – Normand

+0

如果我瞭解您的問題,那麼您會將可注入對象添加到控制器的構造函數中。這就是依賴注入的工作原理。 此鏈接可能有更多幫助: https://docs.asp.net/en/latest/fundamentals/configuration.html – JohnW

1

依賴注入絕對需要一點習慣,而且你不會像你習慣的那樣創建對象。你想要做的是首先修改你的CDbTools來接受注入的字符串。

public CDbTools(IConnectionStrings strings) 
{ 
    _connectionString = strings 
} 

下一步將實際將CDbTools注入到需要它的類中。首先,在啓動時註冊它。

services.AddScoped<CDbTools>(); 

你需要關注這個鏈條。不要把它看作是從頂層向下傳遞對象 - 這會混淆你對問題的分離。每層都有注入的下層。這不僅會讓你注入你正在尋找的字符串。它可以讓你嘲笑事情變得更容易,更容易交換圖層,以及其他好處。