.net - net - cómo obtener valor de appsettings.json
leer appsettings vb net (3)
Así que realmente hay dos maneras de hacer esto.
Opción 1: Clase de opciones
Tienes un archivo appsettings.json:
{
"myConfiguration": {
"myProperty": true
}
}
Usted crea un POCO de configuración así:
public class MyConfiguration
{
public bool MyProperty { get; set; }
}
En su startup.cs tiene algo en sus servicios de configuración que registra la configuración:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
}
Luego, en su controlador / servicio, inyecta las IOptions y es utilizable.
public class ValuesController : Controller
{
private readonly MyConfiguration _myConfiguration;
public ValuesController(IOptions<MyConfiguration> myConfiguration)
{
_myConfiguration = myConfiguration.Value;
}
}
Personalmente no me gusta usar IOptions porque creo que arrastra algo de basura adicional que realmente no quiero, pero puedes hacer cosas geniales como el intercambio en caliente y cosas con eso.
Opción 2: Configuración POCO
En su mayoría es lo mismo, pero en su método de configuración de servicios, en su lugar, se une a un singleton de su POCO.
public void ConfigureServices(IServiceCollection services)
{
//services.Configure<MyConfiguration>(Configuration.GetSection("myConfiguration"));
services.AddSingleton(Configuration.GetSection("myConfiguration").Get<MyConfiguration>());
}
Y luego puedes inyectar el POCO directamente:
public class ValuesController : Controller
{
private readonly MyConfiguration _myConfiguration;
public ValuesController(MyConfiguration myConfiguration)
{
_myConfiguration = myConfiguration;
}
}
Un poco simplista porque probablemente debería usar una interfaz para facilitar un poco las pruebas unitarias, pero se entiende la idea.
Principalmente tomado desde aquí: http://dotnetcoretutorials.com/2016/12/26/custom-configuration-sections-asp-net-core/
public class Bar
{
public static readonly string Foo = ConfigurationManager.AppSettings["Foo"];
}
En .NET Framework 4.x, puedo usar ConfigurationManager.AppSettings ["Foo"]
para obtener Foo
en Webconfig
, y luego puedo obtener fácilmente el valor de Foo
través de Bar.Foo
Pero en .Net Core, debo inyectar options
, y no puedo obtener el valor de Foo
través de Bar.Foo
¿Existe un método que pueda ser directamente a través de Bar.Foo
para obtener el valor de Foo
?
Las soluciones en la parte superior requieren mucho tiempo y no son sencillas, esta es la mejor manera efectiva de hacerlo, no se necesita configuración en el inicio ni nada. Es como usar el buen Configuration.Manager.AppSettings [configuración "]
Primero crea una clase como "Credencial":
public class Credential
{
public string Username {get;set}
public string Password {get;set;}
}
Ahora que está configurado, deje la IConfiguration en su constructor así:
private IConfiguration _configuration;
public ValuesController(IConfiguration iconfig)
{
_configuration = iconfig;
}
Entonces estás listo para llamarlo!
Credential c = new Credential();
c.UserName = _configuration.GetValue<string>("Credential:username");
c.Password = _configuration.GetValue<string>("Credential:password");
Suponiendo que su appsettings.json se ve así:
"Credential": {
"username": "myuser",
"password": "mypassword"
}
Espero que esto ayude a alguien.
También puede utilizar la configuración directamente. Sus ajustes se inyectan para que pueda llegar a ellos con DI ...
private readonly IConfiguration _configuration;
public MyClass(IConfiguration configuration)
{
_configuration = configuration;
}
y luego puedes leer tus configuraciones ...
En este caso estoy recuperando una colección ...
var myList = _configuration.GetSection("MyList").Get<List<string>>();