2016-05-17 91 views
4

剛開始通過遷移當前MVC NET應用程序我開發支持.Net核心RC2播放。它看起來對我來說是因爲用appsettings.json處理配置的方式,如果我有多個連接字符串,我必須使用EF來檢索連接字符串,否則我必須爲每個連接字符串創建單獨的類。我看到的所有示例都使用EF(因爲我將使用Dapper,所以這些對我來說沒有任何意義),或者該示例構建了一個以配置中的部分命名的類。我錯過了更好的解決方案嗎?獲取appsettings.json多連接字符串沒有EF

"Data": { 
     "Server1": { 
      "ConnectionString": "data source={server1};initial catalog=master;integrated security=True;" 
     }, 
     "Server2": { 
      "ConnectionString": "data source={server2};initial catalog=master;integrated security=True;" 
     } 
    } 

我爲什麼要建兩個班,一個如果唯一的財產各得是一個ConnectionString的名爲「服務器1」和另一個「服務器2」?

+1

你不需要建立任何類。您只需訪問這樣的設置:'Configuration [「Data:Server1:ConnectionString」]' – Pawel

+0

@Pawal應該是IMO的答案。另外:我學到了東西,謝謝。我還沒有時間玩這些比特幣 - 非常感謝。 –

+0

@Pawal我也應該包括這個例子。我遇到的問題是Configuration只能在Startup.cs中訪問。我不確定IServiceCollection上的哪個方法將其添加到以便將該字符串放入我的DAL中。合理?並且感謝您的幫助 – Couch

回答

0

您可以使用OptionsDAL層來訪問。我會嘗試寫簡單的例子(RC1):

首先你需要創建以下內容appsettings.json文件:

{ 
    "ConnectionStrings": { 
     "DefaultConnectionString": "Default", 
     "CustomConnectionString": "Custom" 
    } 
} 

然後創建一個類:

public class ConnectionStrings 
{ 
    public string DefaultConnectionString { get; set; } 

    public string CustomConnectionString { get; set; } 
} 

而且在Startup.cs

private IConfiguration Configuration; 
    public Startup(IApplicationEnvironment app) 
    { 
     var builder = new ConfigurationBuilder() 
      .SetBasePath(app.ApplicationBasePath) 
      .AddJsonFile("appsettings.json"); 

     Configuration = builder.Build(); 
    } 
    public void ConfigureServices(IServiceCollection services) 
    { 
     // .... 
     services.AddOptions(); 
     services.Configure<ConnectionStrings>(Configuration.GetSection("ConnectionStrings")); 
    } 

最後將它注入DAL類:

private IOptions<ConnectionStrings> _connectionStrings; 
    public DalClass(IOptions<ConnectionStrings> connectionStrings) 
    { 
     _connectionStrings = connectionStrings; 
    } 
    //use it 
+1

爲了讓這款產品適用於「現貨供應」的RC2,您需要關閉NuGet的Microsoft.Extensions.Options.ConfigurationExtensions包。請參閱(https://github.com/aspnet/Home/issues/1193) – Couch

2

我對Adem對RC2的反應做出了一些更正,所以我想我最好發佈它們。

我配置了appsettings.json,創造像類阿德姆的

{ 
    "ConnectionStrings": { 
     "DefaultConnectionString": "Default", 
     "CustomConnectionString": "Custom" 
    } 
} 

public class ConnectionStrings 
{ 
    public string DefaultConnectionString { get; set; } 

    public string CustomConnectionString { get; set; } 
} 

大部分阿德姆的代碼出來,在VS的框RC2的,所以我只是說了下面的行到配置服務方法

services.Configure<Models.ConnectionStrings>(Configuration.GetSection("ConnectionStrings")); 

主要的缺點是連接ction字符串必須是傳遞給控制器​​(一旦你指定一個強類型的配置對象,並把它添加到服務集合,您可以通過請求IOptions的實例,從任何控制器或操作方法提出要求,https://docs.asp.net/en/latest/mvc/controllers/dependency-injection.html

所以這將轉到控制器,

private readonly ConnectionStrings _connectionStrings; 
     public HomeController(IOptions<ConnectionStrings> connectionStrings) 
     { 
      _connectionStrings = connectionStrings.Value; 
     } 

,然後當你實例化DAL您通過適當的connectionString

DAL.DataMethods dm = new DAL.DataMethods(_connectionStrings.CustomConnectionString); 

個所有的例子證明這一點,他們只是沒有說明,爲什麼我嘗試直接從DAL拉沒有工作