2017-09-28 16 views
2

.NET Framework 4.6.1アプリケーションで使用する.NET Standard 2.0ライブラリを作成しています。
このライブラリにはEFコアが必要ですが、app.configの読み方を理解できません。 .NET Frameworkのライブラリで.NET Standard 2.0ライブラリからapp.configを読み込む

私はこのような私のDBContextを初期化します:

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

しかしのConfigurationManagerは、.NET標準2.0でどこにも見つからないので、私はそれを行うことはできません。
.NET Standard 2.0ライブラリから設定ファイルを読み取るにはどうすればよいですか?

+0

'.NET Core' /' .NET Standard'は 'XML'よりも' JSON'ファイルに多く使われています。 XMLファイルを読む必要がある場合は、 'Microsoft.Extensions.Configuration.Xml'パッケージへの参照を追加する必要があります。詳細については、[here](https://stackoverflow.com/questions/40036819/how-to-pull-configuration-settings-from-xml-file-in-startup-cs)を参照してください。 –

+4

XML設定を読んでいる理由ファイル(.NET Frameworkの概念)を.NET標準ライブラリで使用しますか?それは特に移植性がありません。その点については、通常の.NET Frameworkでもライブラリから設定を読み取ることをお勧めします。代わりに、アプリケーションによって接続文字列を挿入してください。設定ファイルを問題なく読み込むことができます。 –

+0

コンストラクタで 'DbContextOptions 'を受け入れることができます@JeroenMostertが何を言及するか –

答えて

1

インターフェースを作成し、接続文字列のための依存関係反転を使用するので、あなたのコードは、その後、.NET Frameworkで実行されている消費するアプリはその後、独自の設定の実装を作成し、それを渡すことができ

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

のようになります

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

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

そして、すべてのヒップスターの子供たちは、環境変数を使用することができます。

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

誰もが勝つ

関連する問題