从.NET Standard 2.0库中读取app.config

7
我将创建一个.NET Standard 2.0库,供.NET Framework 4.6.1应用程序使用。
该库需要EF Core,但我不知道如何读取app.config文件。
在.NET Framework库中,我会这样初始化我的DBContext:
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
    optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString);
}

由于.NET Standard 2.0中无法找到ConfigurationManager,因此我无法做到这一点。
如何从.NET Standard 2.0库中读取配置文件?


.NET Core/.NET StandardXML更常用于JSON文件。如果您需要读取XML文件,则必须添加对包Microsoft.Extensions.Configuration.Xml的引用。请参见此处获取更多详细信息。 - Camilo Terevinto
5
你为什么要在.NET Standard库中读取XML配置文件(.NET Framework的概念)?这样做并不特别便携。即使在常规的.NET Framework上,从库中读取设置也不是一个好主意。相反,应该由应用程序注入连接字符串;它可以轻松地读取其配置文件。 - Jeroen Mostert
您可以在构造函数中接受一个 DbContextOptions<MyDbContext> 来执行 @JeroenMostert 提到的操作。 - Camilo Terevinto
1个回答

7

创建一个接口并使用依赖倒置来处理连接字符串,这样你的代码将会是这个样子:

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

然后在运行.NET Framework的使用应用程序中,可以创建自己的设置实现并将其传递给其他应用程序。

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

每个人都是赢家

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接