Не удалось разрешить службу для типа "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)