无法解决类型' System.String'的服务在尝试激活“我的服务”时

时间:2018-04-13 20:29:55

标签: asp.net-core dependency-injection azure-service-fabric

我在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?如何进一步调试?

1 个答案:

答案 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)