2015-12-14 11 views
6

Tworzę pakiet Nuget i pracuję w mojej bibliotece klas. Potrzebuję dostępu do appsetting.json lub config.json, aby uzyskać dostęp do domyślnego ciągu połączenia.Dostęp z biblioteki klas do appsetting.json lub config.json w vNext

Jaki jest najlepszy sposób na przeniesienie mojego działającego kodu do nowej wersji programu ASP.NET vNext?

Przeczytałem o tym w this question, ale jest to dla mnie dobre rozwiązanie.

kod robocza:

/// <summary> 
/// Retrieves the default connectionstring from the App.config or Web.config file. 
/// </summary> 
/// <returns>Returns the default connectionstring from the App.config or Web.config file.</returns> 
public static string GetDefaultConnectionString() 
{ 
    return ConfigurationManager.ConnectionStrings[DefaultConnectionstringName].ConnectionString; 
} 
+0

mam ten sam scenariusz (MVC przebieg projektu, ale cały dostęp do danych odbywa się w odrębnym projekcie, który powinien być czytanie ciąg połączenia z projektu WWW). Nie widzę odpowiedzi poniżej jako "zaakceptowany", czy to nadal nie działa? – ganders

Odpowiedz

5

starej klasy biblioteki automatycznie odczytywać wartości konfiguracyjne z app.config. W nowej bibliotece klas musisz dodać tę funkcję. Startup.cs służy do odczytu app.settings W bibliotece klas musisz dodać także Startup.cs.

W swojej project.json upewnij się, że zależność

"Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final" 

dodać appsettings.json poprzez add - new item. Filtr na json

{ 
    "Data": { 
    "MyDb": { 
     "ConnectionString": "Server=.;Database=MyDb;Trusted_Connection=True;MultipleActiveResultSets=true" 
    } 
    } 
} 

można nazwać połączenie MojaBD lub DefaultConnection.

Dodaj kod Startup.cs, aby odczytać kod appsettings.json.

Zobacz poniżej, aby uzyskać metodę konstruktora Startup.

np.

using Microsoft.Data.Entity; 
using Microsoft.Extensions.Configuration; 
using Microsoft.Extensions.DependencyInjection; 



namespace MyProject 
{ 
    public class Startup 
    { 
     public IConfigurationRoot Configuration { get; set; } 

     public Startup() 
     { 
      var builder = new ConfigurationBuilder() 
      .AddJsonFile("appsettings.json"); 

      Configuration = builder.Build(); 
     } 

     public void ConfigureServices(IServiceCollection services) 
     { 
      services.AddEntityFramework() 
       .AddSqlServer() 
       .AddDbContext<MyDbContext>(options => 
        options.UseSqlServer(Configuration["Data:MyDb:ConnectionString"])); 
     } 
    } 
} 

W powyższym przykładzie odniesienia

Configuration["Data:MyDb:ConnectionString] 

powróci typu IConfigurationRoot, nie ciągu.

Aby uzyskać wartość ciągu spróbować następujących

string connection = Configuration.Get<string>("Data:MyDb:ConnectionString"); 
+1

Witam, jest to projekt internetowy ... Jestem w bibliotece klas vNastępne – chemitaxis

+0

mmm ok, próbuję teraz ... ale kiedy używam go jako Nuget, to projekt będzie chciał przeczytać ? Dzięki! – chemitaxis

+0

Stara biblioteka klas odczytuje wartości konfiguracyjne automatycznie za pomocą pliku app.config. W nowej bibliotece klas musisz dodać tę funkcję. Startup.cs służy do odczytu app.settings W bibliotece klas musisz dodać także Startup.cs. Kopiuję ten kod z kodu biblioteki klas, który działa. Zmienię moją oryginalną odpowiedź, aby było łatwiejsze. – firste

Powiązane problemy