如何在.netstanard库中使用System.Configuration.ConfigurationManager for .net core和.netframework?

问题描述 投票:2回答:1

我正在将.netframework 4.7.2类库迁移到.netstandard 2.0库中。

在.netframework类库中使用了ConfigurationManager来读取应用程序的设置。

.netstanard中的System.Configuration.ConfigurationManager有任何可替代的选项。

迁移的类库需要在.net core web API和旧的.netframework web应用程序中使用。

c# asp.net-core .net-standard .net-framework-version
1个回答
1
投票

正如我说的,你不应该直接依赖类库中的配置获取方式。保持你的类库的灵活性。

不要在你的类库中这样做。

public void UpdateProductName(int productId, string name)
{
    using (var connection = new SqlConnection(ConfigurationManager.ConnectionStrings["MyDatabase"]))
    {
        connection.ExecuteNonQuery("UPDATE dbo.Products SET Name = @Name WHERE Id = @ProductId", new {  ProductId = productId, Name = name });
    }
}

通过在你的类库中直接使用ConfigurationManager,你已经把类绑在了只允许获取连接字符串的一种形式上。这意味着如果你想使用appsettings.json,或者环境变量,或者KeyVault,或者其他任何获取配置的方法,你都不能。

相反,可以这样做。

public class MyDatabaseRepository
{
    readonly string _connectionString;

    public MyDatabaseRepository(string connectionString)
    {
        _connectionString = connectionString;
    }
} 

public void UpdateProductName(int productId, string name)
{
    using (var connection = new SqlConnection(_connectionString))
    {
        connection.ExecuteNonQuery("UPDATE dbo.Products SET Name = @Name WHERE Id = @ProductId", new {  ProductId = productId, Name = name });
    }
}

现在,这允许你在消费应用程序中以任何方式获取连接字符串。

在.NET Core应用程序中,你可能会这样做,通过Microsoft.Extensions.Configuration从appsettings.json获取连接字符串。

string connectionString = Configuration.GetConnectionString("MyDatabase");
MyDatabaseRepository repository = new MyDatabaseRepository(connectionString);
repository.UpdateProductName(1, "Transformer");

而且它仍然允许你在你的.NET框架应用程序中灵活地使用System.Configuration。

string connectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;
MyDatabaseRepository repository = new MyDatabaseRepository(connectionString);
repository.UpdateProductName(1, "Transformer");

再加上 依赖性注入,这成为一个非常灵活和强大的工具。


1
投票

你可以安装 ConfigurationManager 通过 套餐,它的目标是.Net Standard 2.0。

至于ASP.Net Core,请看以下内容 Microsoft.Extensions.Configuration.

© www.soinside.com 2019 - 2024. All rights reserved.