我在Service Fabric无状态ASP.NET核心应用程序中看到以下异常。
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
?如何进一步调试?
答案 0 :(得分:17)
Asp.Net Core中的默认DI框架受限于可用的功能。 假设类构造函数如
public MyService(string dependencyString) {
//...
}
容器无法知道要将依赖字符串注入服务的值。
在上述情况下,在将服务添加到集合时,可以使用其中一个重载来提供缺少的string
。
//...
services.AddScoped<IMyService>(_ => new MyService("value here"));
//...
这样,当服务被激活时,它可以正确返回。
文档参考:Dependency injection in ASP.NET Core - &gt; Constructor injection behavior (v2.1)