2

I appsettings.json Dans .NET accédé Core 2 API Web Controller en ajoutant simplement ci-dessous:services.AddSingleton <IConfiguration> vraiment nécessaire dans le noyau .net 2 API

public class MyController : Controller 
    { 
     private readonly IConfiguration appConfig; 

     public MyController(IConfiguration configuration) 
     { 
      appConfig = configuration; 
     } 
    } 

Sans ajouter ci-dessous dans la classe de démarrage ConfigureServices (services IServiceCollection) après services.AddMvc() ;:

services.AddSingleton<IConfiguration>(Configuration); 

y at-il des failles dans mon approche? Dans les documents officiels pour la section de configuration .Net Core 2, il n'est pas mentionné d'utiliser 'AddSingleton' pas même une fois: https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration

également en effectuant une recherche je ne pouvais pas trouver de contenu connexe avec l'accès à la configuration! https://docs.microsoft.com/en-us/search/index?search=AddSingleton&scope=ASP.NET+Core

liens ci-dessous montre AddSingleton comme étape obligatoire:

Access appsettings.json values in controller classes

https://blogs.technet.microsoft.com/dariuszporowski/tip-of-the-week-how-to-access-configuration-from-controller-in-asp-net-core-2-0/

Répondre

5

Comme le official roadmap for ASP.NET Core 2.0 dit:

Une IConfiguration instance sera ajouté à la services conteneur par défaut dans ASP.NET Core 2.0, de sorte que toutes les applications peuvent facilement récupérer les valeurs de configuration via le conteneur

Ainsi services.AddSingleton<IConfiguration> (ou similaire) est déjà appelé par le cadre lui-même.

Vous pouvez voir ce comportement dans le fichier WebHostBuilder.cs ou (lors de l'utilisation des méthodes d'extension d'utilitaire) dans le fichier HostBuilder.cs.

+0

Alors, que se passe-t-il lorsque l'utilisateur l'ajoute manuellement en plus d'être défini par défaut? il semble ne pas avertit ou des erreurs sont apparues! –

+3

Comme pour toute autre inscription dans ASP.NET Core DI, l'enregistrement ** last ** est utilisé chaque fois que quelqu'un demande ce service à partir de 'IServiceProvider'. Parce que, dans votre cas, l'enregistrement est le même, rien ne change (vous avez maintenant deux enregistrements identiques pour le même service). –