J'ai parcouru la documentation de configuration sur le noyau ASP.NET. La documentation indique que vous pouvez accéder à la configuration de n'importe où dans l'application.
Voici Startup.cs créé par le modèle
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
if (env.IsEnvironment("Development"))
{
// This will push telemetry data through Application Insights pipeline faster, allowing you to view results immediately.
builder.AddApplicationInsightsSettings(developerMode: true);
}
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container
public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddApplicationInsightsTelemetry(Configuration);
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseApplicationInsightsRequestTelemetry();
app.UseApplicationInsightsExceptionTelemetry();
app.UseMvc();
}
}
Donc, dans Startup.cs
nous configurons tous les paramètres, Startup.cs a également une propriété nomméeConfiguration
Qu'est-ce que je ne suis pas en mesure de comprendre comment accéder à cette configuration dans le contrôleur ou n'importe où dans l'application? MS recommande d'utiliser le modèle d'options mais je n'ai que 4-5 paires clé-valeur, donc je ne voudrais pas utiliser le modèle d'options. Je voulais juste avoir accès à la configuration en application. Comment puis-je l'injecter dans n'importe quelle classe?
Réponses:
Mettre à jour
L'utilisation d'ASP.NET Core 2.0 ajoutera automatiquement l'
IConfiguration
instance de votre application dans le conteneur d'injection de dépendances. Cela fonctionne également en conjonction avecConfigureAppConfiguration
sur leWebHostBuilder
.Par exemple:
C'est aussi simple que d'ajouter l'
IConfiguration
instance à la collection de services en tant qu'objet singleton dansConfigureServices
:Où
Configuration
est l'instance dans votreStartup
classe.Cela vous permet d'injecter
IConfiguration
dans n'importe quel contrôleur ou service:la source
IConfiguration
comme ça est très fuyant. Il est préférable d'utiliser le modèle Options .Dans .NET Core, vous pouvez injecter le en
IConfiguration
tant que paramètre dans votre constructeur de classe, et il sera disponible.Maintenant, lorsque vous voulez créer une instance de votre classe, puisque votre classe est injectée dans
IConfiguration
, vous ne pourrez pas simplement le fairenew MyClass()
, car elle a besoin d'unIConfiguration
paramètre injecté dans le constructeur, vous devrez donc injecter votre classe comme bien à la chaîne d'injection, ce qui signifie deux étapes simples:1) Ajoutez vos classes - où vous voulez utiliser le
IConfiguration
,IServiceCollection
à laConfigureServices()
méthode dansStartup.cs
2) Définissez une instance - disons dans le
Controller
, et injectez-la en utilisant le constructeur:Vous devriez maintenant pouvoir profiter
_myClass.configuration
librement de votre ...Si vous cherchez toujours un moyen de le rendre disponible sans avoir à injecter les classes dans le contrôleur, vous pouvez le stocker dans un
static class
, que vous configurerez dans leStartup.cs
, quelque chose comme:Et votre
Startup
constructeur devrait ressembler à ceci:Ensuite, utilisez
MyAppData.Configuration
n'importe où dans votre programme.Ne me demandez pas pourquoi la première option est la bonne façon, je peux juste voir que les développeurs expérimentés évitent toujours les données inutiles en cours de route, et il est bien entendu que ce n'est pas la meilleure pratique d'avoir des tonnes de données disponibles en mémoire tout le temps, ce n'est pas non plus bon pour les performances et ni pour le développement, et il est peut-être aussi plus sûr de n'avoir avec vous que ce dont vous avez besoin.
la source
System.Configuration
CORE sur les rails. Maintenant, vous pouvez accéder à votre bon vieux app.configs comme au bon vieux temps. Et je ne parle pas ici de contrôleurs. Nous parlons de composants qui ont leurs propres configurationsJe sais que c'est vieux mais étant donné les modèles IOptions, c'est relativement simple à mettre en œuvre:
Classe avec des propriétés publiques get / set qui correspondent aux paramètres de la configuration
enregistrer vos paramètres
injecter via IOptions
Je ne sais pas pourquoi vous ne feriez pas cela.
la source
Microsoft.Extensions.Configuration
,Microsoft.Extensions.Configuration.Binder
etMicrosoft.Extensions.Configuration.Json
puis vous chargez leappsettings.json
fichier commevar config = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();
..et aussi vous devez vous assurerappsettings.json
copie au répertoire de sortie est réglé surcopy always
Je le fais comme ça en ce moment:
Et puis j'utilise ceci où j'ai besoin d'obtenir les données du fichier appsettings.json:
la source
Il existe également une option pour rendre
configuration
statique dans startup.cs afin que vous puissiez y accéder facilement n'importe où, les variables statiques sont pratiques, hein!Cela rend la configuration accessible n'importe où en utilisant
Startup.Configuration.GetSection...
Qu'est-ce qui ne va pas?la source
J'ai regardé dans l'exemple de modèle d'options et j'ai vu ceci:
Lors de l'ajout d'Iconfiguration dans le constructeur de ma classe, je pouvais accéder aux options de configuration via DI.
Exemple:
la source
Je sais qu'il peut y avoir plusieurs façons de faire cela, j'utilise Core 3.1 et je cherchais l'option optimale / plus propre et j'ai fini par faire ceci:
la source
En 8-2017, Microsoft a sorti
System.Configuration
pour .NET CORE v4.4. Actuellement v4.5 et v4.6.Pour ceux d'entre nous qui travaillent sur la transformation de .Net Framework vers CORE, c'est essentiel. Il permet de conserver et d'utiliser les
app.config
fichiers actuels , accessibles depuis n'importe quel assemblage. C'est probablement même une alternative àappsettings.json
, puisque Microsoft en a réalisé la nécessité. Cela fonctionne comme avant dans FW. Il y a une différence:Dans les applications Web, [par exemple l'API WEB ASP.NET CORE] vous devez utiliser
app.config
et non web.config pour votreappSettings
ouconfigurationSection
. Vous devrez peut-être utiliser,web.config
mais uniquement si vous déployez votre site via IIS. Vous placez des paramètres spécifiques à IIS dansweb.config
Je l'ai testé avec netstandard20 DLL et Asp.net Core Web Api et tout fonctionne.
la source
L'utilisation du modèle Options dans ASP.NET Core est la solution. Je veux juste ajouter, si vous avez besoin d' accéder aux options de votre startup.cs , je vous recommande de le faire de cette façon:
CosmosDbOptions.cs:
Startup.cs:
la source
Je dois lire mes propres paramètres au démarrage.
Cela doit être là avant que le WebHost ne démarre (car j'ai besoin de l'url / IP et du port "pour écouter" du fichier de paramètres et de l'appliquer au WebHost). De plus, j'ai besoin des paramètres publics dans l'ensemble de l'application.
Après avoir cherché pendant un certain temps (aucun exemple complet trouvé, seulement des extraits de code) et après plusieurs essais et erreurs, j'ai décidé de le faire à l'ancienne avec un propre fichier .ini.
Donc .. si vous voulez utiliser votre propre fichier .ini et / ou définissez le "pour écouter url / IP" votre propre et / ou avez besoin des paramètres publics, ceci est pour vous ...
Exemple complet, valable pour le noyau 2.1 (mvc):
Créez un fichier .ini - exemple:
où les Dummyx ne sont inclus qu'à titre d'exemple pour d'autres types de date que string (et aussi pour tester le cas «mauvais param» (voir code ci-dessous).
Ajout d'un fichier de code à la racine du projet, pour stocker les variables globales:
Modification du code dans program.cs (avant CreateWebHostBuilder ()):
Par ici:
Si - par exemple - un mauvais type est défini (par exemple, le * Dummy1 = gew7623 est activé à la place du Dummy1 = true) l'hôte est rouge les informations sont sur la console (y compris l'exception) et je peux également réagir dans l'application (GV.bFehler_Ini est défini sur true, s'il y a des erreurs avec le .ini)
la source