web-dev-qa-db-fra.com

Variables globales dans ASP.Net Core 2

Je développe une application Web dans ASP.NET Core et possède actuellement un grand ensemble de clés, telles que des clés de compte à bande. Au lieu de les répartir tout au long du projet dans différentes classes, je voudrais les placer tous ensemble dans json où ils pourraient être consultés dans le monde entier. J'ai essayé de les placer dans appsettings.json mais je ne peux y accéder nulle part.

11
Luke Davidson

Je fais souvent ce genre de choses avec des chaînes de connexion et d'autres constantes globales. Créez d'abord une classe pour les variables dont vous avez besoin. Dans mon projet, c'est MDUOptions mais tout ce que vous voulez.

public class MDUOptions
{
    public string mduConnectionString { get; set; }
    public string secondaryConnectionString { get; set; }
}

Maintenant, dans votre méthode ConfigureServices Startup.cs:

Action<MDU.MDUOptions> mduOptions = (opt =>
{
    opt.mduConnectionString = Configuration["ConnectionStrings:mduConnection"];
});
services.Configure(mduOptions);
services.AddSingleton(resolver => resolver.GetRequiredService<IOptions<MDUOptions>>().Value);

Maintenant, vous utilisez DI pour y accéder en code:

public class PropertySalesRepository : IPropertySalesRepository
{
    private static string _mduDb;

    public PropertySalesRepository(MDUOptions options)
    {
        _mduDb = options.mduConnectionString;
    }
    ....
}

Dans mon cas, la seule propriété que je voulais était la chaîne mais j'aurais pu utiliser toute la classe d'options.

12
nurdyguy

Dans appsettings.json, conservez les variables.

{
    "foo": "value1",
    "bar": "value2",
}

Créer AppSettings classe.

public class AppSettings
{
    public string foo { get; set; }

    public string bar { get; set; }
}

Dans Startup.cs registre de fichiers.

public IServiceProvider ConfigureServices(IServiceCollection services)
{
    services.Configure<AppSettings>(Configuration);
}

Usage,

public class MyController : Controller
{
    private readonly IOptions<AppSettings> _appSettings;

    public MyController(IOptions<AppSettings> appSettings)
    {
        _appSettings = appSettings;
    }
    var fooValue = _appSettings.Value.foo;
    var barValue = _appSettings.Value.bar;
}
9
prisar