Как использовать System.Configuration.ConfigurationManager в библиотеке .netstanard для. net core и .netframework - PullRequest
2 голосов
/ 30 апреля 2020

Я перевожу библиотеку классов .netframework 4.7.2 в библиотеку .netstandard 2.0.

ConfigurationManager используется в библиотеке классов .netframework для чтения настроек приложения.

Любая альтернативная опция, доступная для System.Configuration.ConfigurationManager в .netstanard.

Перенесенную библиотеку классов необходимо использовать в базовом веб-API. net и старом веб-приложении .netframework.

Ответы [ 2 ]

1 голос
/ 01 мая 2020

Как я уже сказал, вы не должны напрямую зависеть от того, как конфигурация получена в библиотеке классов. Сохраняйте гибкость своей библиотеки классов.

Не делайте этого в своей библиотеке классов:

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 в своей библиотеке классов вы привязали класс к разрешению только одного Форма получения строки подключения. Это означает, что если вы хотите использовать настройки приложений. 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 Базовом приложении вы можете сделать это, чтобы получить строку подключения из appsettings. json через Microsoft.Extensions.Configuration:

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

И он по-прежнему позволяет гибко использовать System.Configuration в вашем приложении. NET Framework:

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

В сочетании с Dependency Injection , это становится очень гибким и мощным инструментом.

1 голос
/ 01 мая 2020

Вы можете установить ConfigurationManager через пакет nuget , который предназначен. Net Стандарт 2.0.

Что касается ASP. Net Ядро, взгляните на Microsoft.Extensions.Configuration .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...