Estoy migrando la biblioteca de clases .net framework 4.7.2 a la biblioteca .net standard 2.0.

ConfigurationManager se utiliza en la biblioteca de clases .netframework para leer la configuración de la aplicación.

Cualquier opción alternativa disponible para System.Configuration.ConfigurationManager en .netstanard.

La biblioteca de clases migrada debe usarse en una API web .net core y en una aplicación web antigua .netframework.

2
Manu 30 abr. 2020 a las 20:22

2 respuestas

Puede instalar ConfigurationManager a través de nuget package, que se dirige a .Net Estándar 2.0.

En cuanto a ASP.Net Core, eche un vistazo a Microsoft.Extensions.Configuration.

1
weichch 1 may. 2020 a las 09:04

Como dije, no debe depender directamente de cómo se obtiene la configuración en una biblioteca de clases. Mantenga su biblioteca de clase flexible.

No hagas esto en la biblioteca de tu clase:

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

Al usar directamente ConfigurationManager en su biblioteca de clases, ha vinculado la clase para permitir solo una forma de obtener la cadena de conexión. Eso significa que si desea usar appsettings.json, o variables de entorno, o KeyVault, o cualquier otro método para obtener la configuración, no puede.

En cambio, haz esto:

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

Ahora eso le permite obtener una cadena de conexión como desee en la aplicación de consumo.

En una aplicación .NET Core, puede hacer esto para obtener la cadena de conexión de appsettings.json a través de Microsoft.Extensions.Configuration:

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

Y aún le permite la flexibilidad de usar System.Configuration en su aplicación .NET Framework:

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

Junto con Inyección de dependencia, esto se convierte en una inyección muy flexible y poderosa herramienta.

0
mason 1 may. 2020 a las 13:20