ASP.NET de Base à la Section de Configuration de Démarrage
Je suis à la migration d'un ASP.NET 5 RC1 projet de ASP.NET de Base, et ont rencontré un problème intéressant, je n'ai pas encore vu, ou trouvé une solution pour.
Afin d'utiliser les paramètres de configuration de Démarrage, je l'ai déjà récupéré la configuration de la manière suivante
//Works fine for DI both in ASP.NET 5 RC1 and ASP.NET Core
services.Configure<SomeConfigurationClass>(Configuration.GetSection("SomeConfigurationSection"));
//How I previous retrieved the configuration for use in startup.
//No longer available in ASP.NET Core
var someConfigurationToUseLater = Configuration.Get<SomeConfigurationClass>("SomeConfigurationSection");
Après la mise à jour de ASP.NET Core 1.0, il semble Configuration.Obtenir des<T>() n'est plus disponible.
J'ai essayé de mettre à jour le code pour utiliser la Configuration.GetValue<T>() mais cela ne semble pas fonctionner avec des objets et ne fonctionne que lorsque l'offre d'une voie à une valeur. Cela m'a laissé avec une solution de contournement pour plus de mes classes de configuration comme
var someConfigurationName = "someConfiguration";
var someConfigurationClass = new SomeConfigurationClass()
{
Value1 = Configuration.GetValue<string>($"{someConfigurationName}:value1"),
Foo = Configuration.GetValue<string>($"{someConfigurationName}:foo"),
Bar = Configuration.GetValue<string>($"{someConfigurationName}:bar")
};
Cependant, c'est un problème lors de la configuration de la classe contient un tableau d'objets. Dans mon cas, un tableau d'objets Client
public class ClientConfiguration
{
public Client[] Clients { get; set; }
}
Avec la configuration suivante
"configuredClients": {
"clients": [
{
"clientName": "Client1",
"clientId": "Client1"
},
{
"clientName": "Client2",
"clientId": "Client2"
}
]
}
Où ce serait déjà lier à la propriété Clients de ma classe de configuration, pas de problème, je n'arrive plus à trouver un moyen de le faire dans ASP.NET Core 1.0
Vous devez vous connecter pour publier un commentaire.
Mise À Jour De Réponse
ASP Base 1.1.0 du modèle générique de la liaison se fait maintenant à l'aide de
Get
:Réponse Originale À Cette Question
Comment à ce sujet:
Get<>
. docs.microsoft.com/en-us/aspnet/core/fundamentals/...Avec ASP.NET Core 2.0 (essentiellement Core 1.1+), le
IConfiguration
est injecté àStartup
, et qui peut être utilisé dansConfigureServices()
etConfigure()
méthodes.Comme indiqué dans l'acceptation de réponse, la configuration peut être lié à un objet. Mais si une valeur est requise, la clé de base de l'approche fonctionne bien.
La
IConfiguration
fonctionne toujours avec le côlon:
chaîne séparée par des touches. Et pourarray
, l'utilisation de 0 basée sur l'indice. Ou utilisez le génériquegetValue<T>()
méthode avec les mêmes touches. Voir l'exemple ci-dessous:D'utiliser les mêmes valeurs de configuration dans d'autres classes (par exemple, les Contrôleurs)
IConfiguration
et utiliser la même clé de l'approche fondée sur comme ci-dessus. OuExemple de code ci-dessous:
Plus d'exemples ici.
services.Configure<ClientConfiguration>(Configuration.GetSection("configuredClients"))
alors au lieu d'injecter desIConfiguration
dans votre contrôleur injecterIOptions<ClientConfiguration>
.IConfiguration
comme une des options, j'ai aussi montré l'injection de laClientConfiguration
directement. La "meilleure" solution dépend de multiples facteurs. À l'aide deIOptions<>
est également une option, donc estIOptionsSnapshot
et les autres.Vous n'avez pas lu la configuration manuellement généralement dans ASP.NET de Base vous-même, au lieu de créer un objet qui correspond à votre définition. Vous pouvez en lire plus à ce sujet dans la documentation officielle ici.
E. g.
Ensuite, vous avez juste injecter les options
IOptions<MyOptions>
où vous en avez besoin.Si vous voulez obtenir d'abord "clientName"(prévu "Client1"), il suffit d'écrire:
Mise à jour pour le commentaire
Installer .NET de Base 1.0.1 et aller avec @TomMakin du chemin.