尝试激活“MyService”时无法解析“System.String”类型的服务
Posted
技术标签:
【中文标题】尝试激活“MyService”时无法解析“System.String”类型的服务【英文标题】:Unable to resolve service for type 'System.String' while attempting to activate 'MyService' 【发布时间】:2018-09-24 06:25:27 【问题描述】:我在我的 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)
怎么解决不了System.String
?如何进一步调试?
【问题讨论】:
'MyService' 可能期望构造函数中有一个字符串,而 IoC 容器不知道如何解析它,您需要查看服务注册以将其配置为所需的字符串 确实如此。也许就是这么明显。想一想,我认为我以前从未依赖过字符串。只会像 ILoggerAsp.Net Core 中默认的 DI 框架在可用功能方面受到限制。 假设类构造函数像
public MyService(string dependencyString)
//...
容器无法知道要使用什么值来将依赖字符串注入到服务中。
在上述情况下,在将服务添加到集合时,可以使用其中一种重载来提供缺少的 string
。
//...
services.AddScoped<IMyService>(_ => new MyService("value here"));
//...
这样在服务被激活的时候就可以正常返回了。
文档参考:Dependency injection in ASP.NET Core -> Constructor injection behavior (v2.1)
【讨论】:
以上是关于尝试激活“MyService”时无法解析“System.String”类型的服务的主要内容,如果未能解决你的问题,请参考以下文章
InvalidOperationException:尝试激活“DocumentController”时无法解析“IDocumentService”类型的服务
尝试激活“AspNetCoreRateLimit.IpRateLimitMiddleware”时无法解析“AspNetCoreRateLimit.IProcessingStrategy”类型的服务
尝试激活“AuthenticateController”时无法解析“Microsoft.AspNetCore.Identity.UserManager”类型的服务