web-dev-qa-db-fra.com

Impossible de résoudre le service pour le type «System.String» lors de la tentative d'activation de «MyService»

Je vois l'exception suivante dans mon application Service Fabric Stateless ASP.NET Core.

System.InvalidOperationException: Unable to resolve service for type 'System.String' while attempting to activate 'MyService'.
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.Service.PopulateCallSites(ServiceProvider provider, ISet`1 callSiteChain, ParameterInfo[] parameters, Boolean throwIfCallSiteNotFound)
   at Microsoft.Extensions.DependencyInjection.ServiceLookup.Service.CreateCallSite(ServiceProvider provider, ISet`1 callSiteChain)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetResolveCallSite(IService service, ISet`1 callSiteChain)
   at Microsoft.Extensions.DependencyInjection.ServiceProvider.GetServiceCallSite(Type serviceType, ISet`1 callSiteChain)

Comment ne peut-il pas résoudre System.String? Comment puis-je déboguer davantage?

13
spottedmahn

Le framework DI par défaut dans Asp.Net Core est limité dans les fonctionnalités disponibles. En supposant un constructeur de classe comme

public MyService(string dependencyString) {
    //...
}

Il n'y a aucun moyen pour le conteneur de savoir quelle valeur utiliser pour la chaîne dépendante à injecter dans le service.

Dans le cas ci-dessus, le string manquant peut être fourni à l'aide de l'une des surcharges lors de l'ajout du service à la collection.

//...

services.AddScoped<IMyService>(_ => new MyService("value here"));

//...

De cette façon, lorsque le service est activé, il peut être correctement renvoyé.


Référence de la documentation: injection de dépendance dans ASP.NET Core -> comportement d'injection du constructeur (v2.1)

21
Nkosi