2017-09-28 14 views
2

Ich erstelle eine .NET Standard 2.0-Bibliothek, die von einer .NET Framework 4.6.1-Anwendung verwendet wird.
Diese Bibliothek benötigt EF Core, aber ich kann nicht herausfinden, wie man die app.config liest.Lesen von app.config aus der .NET Standard 2.0-Bibliothek

In einer .NET Framework-Bibliothek würde ich meine DbContext wie folgt initialisieren:

protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
{ 
    optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString); 
} 

Aber ich kann es nicht tun, da Konfigurationsmanager ist nicht in .NET-Standard 2.0 gefunden werden.
Wie kann ich die Konfigurationsdatei aus einer .NET Standard 2.0-Bibliothek lesen?

+0

'.NET Core' /' .NET Standard' ist mehr an 'JSON' Dateien als' XML' gewöhnt. Wenn Sie XML-Dateien lesen müssen, müssen Sie einen Verweis auf das Paket 'Microsoft.Extensions.Configuration.Xml' hinzufügen. Weitere Informationen finden Sie unter [hier] (https://stackoverflow.com/questions/40036819/how-to-pull-configuration-settings-from-xml-file-in-startup-cs) –

+4

Warum lesen Sie eine XML-Konfiguration? Datei (ein .NET Framework-Konzept) in einer .NET Standard-Bibliothek? Das ist nicht besonders tragbar. Es ist auch nicht empfehlenswert, Einstellungen aus einer Bibliothek zu lesen, selbst auf dem regulären .NET Framework. Lassen Sie stattdessen die Verbindungszeichenfolge von der Anwendung injizieren; Es kann seine Konfigurationsdatei ohne Probleme lesen. –

+0

Sie können einen 'DbContextOptions ' im Konstruktor akzeptieren, um das zu tun, was @ JeroenMostert erwähnt –

Antwort

1

eine Schnittstelle erstellen und Abhängigkeits Inversion für die Verbindungszeichenfolge verwenden, so wird Ihr Code etwas aussehen

public interface IConnectionSettings 
{ 
    string MyDatabaseConnectionString { get; } 
} 

class MyClass 
{ 
    private readonly IConnectionSettings _connectionSettings; 

    public MyClass(IConnectionSettings connectionSettings) 
    { 
     _connectionSettings = connectionSettings; 
    } 

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 
     optionsBuilder.UseSqlServer(_connectionSettings.MyDatabaseConnectionString); 
    } 
} 

Dann die verzehrende App in .NET Framework ausgeführt wird, können dann ihre eigenen Einstellungen Implementierung erstellen und geben es in

public class ConfigurationManagerConnectionSettings : IConnectionSettings 
{ 
    public string MyDatabaseConnectionString { get; } 
     = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString; 
} 

var s = new ConfigurationManagerConnectionSettings(); 
var myClass = new MyClass(s); 

Und die alle hipster Kinder können Umgebungsvariablen verwenden:

public class EnvironmentVariableConnectionSettings : IConnectionSettings 
{ 
    public string MyDatabaseConnectionString { get; } 
     = Environment.GetEnvironmentVariable("MyDatabaseConnectionString"); 
} 

Win für alle

Verwandte Themen