2015-12-14 1 views
6

Sto creando un pacchetto Nuget e sto lavorando nella mia libreria di classi. Ho bisogno di accedere a appsetting.json o config.json per accedere alla stringa di connessione predefinita.Accesso dalla libreria di classi a appsetting.json o config.json in vNext

Qual è il modo migliore per migrare il mio codice di lavoro effettivo alla nuova versione di ASP.NET vNext?

Ho letto su di esso in this question, ma è una soluzione eccellente per me.

codice di lavoro:

/// <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

Ho questo stesso scenario (MVC progetto in corso, ma tutti l'accesso ai dati fatto in progetto separato, il quale dovrebbe essere la lettura della stringa di connessione dal progetto web). Non vedo la risposta sotto come "accettata", non funziona ancora per te? – ganders

risposta

5

La libreria di classi vecchia leggere i valori di configurazione automaticamente con l'app.config. Nella nuova libreria di classi devi aggiungere questa funzionalità. Startup.cs viene utilizzato per leggere app.settings In una libreria di classi è necessario aggiungere anche Startup.cs.

Nella tua project.json assicuratevi di avere la dipendenza

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

Aggiungi un appsettings.json via add - new item. Filtro sul json

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

È possibile chiamare la tua connessione MyDb o DefaultConnection.

Aggiungere un Startup.cs per inserire il codice per leggere appsettings.json.

Vedere di seguito il metodo di costruzione Startup.

ad es.

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"])); 
     } 
    } 
} 

Nell'esempio sopra il riferimento

Configuration["Data:MyDb:ConnectionString] 

restituirà un tipo di IConfigurationRoot, non stringa.

Per ottenere il valore di stringa di tentare di risolverli

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

Ciao, questo è per un progetto web ... Sono in una libreria di classi vNext – chemitaxis

+0

mmm ok, ci sto provando in questo momento ... ma, quando lo uso come Nuget, waht project.json leggerà ? Grazie! – chemitaxis

+0

La vecchia libreria di classi legge automaticamente i valori di configurazione con app.config. Nella nuova libreria di classi devi aggiungere questa funzionalità. Startup.cs viene utilizzato per leggere app.settings In una libreria di classi è necessario aggiungere anche Startup.cs. Sto copiando questo codice dal codice della mia libreria di classi, che funziona. Modificherò la mia risposta originale per renderlo più semplice – firste