Не удалось разрешить службу для типа "System.String" при попытке активировать "MyService"

Я вижу следующее исключение в своем приложении ASP.NET Core 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)

Как он не может решить System.String? Как отлаживать это дальше?

Ответ 1

Платформа DI по умолчанию в Asp.Net Core ограничена в доступных функциях. Предполагая, что конструктор класса, как

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

Контейнер не может знать, какое значение использовать для зависимой строки, вводимой в службу.

В приведенном выше случае недостающая string может быть предоставлена с использованием одной из перегрузок при добавлении службы в коллекцию.

//...

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

//...

Таким образом, когда услуга активируется, ее можно правильно вернуть.


Ссылка на документацию: внедрение зависимостей в ASP.NET Coreповедение внедрения конструкторов (v2.1)