Как я уже сказал, вы не должны напрямую зависеть от того, как конфигурация получена в библиотеке классов. Сохраняйте гибкость библиотеки классов.
Не делайте этого в своей библиотеке классов:
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 вы можете сделать это, чтобы получить строку подключения из 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");
В сочетании с внедрением зависимостей это становится очень гибким и мощным инструмент.
person
mason
schedule
01.05.2020