尝试激活"MyService"时无法解析"System.String"类型的服务

spo*_*ahn 14 dependency-injection .net-core azure-service-fabric asp.net-core

我在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)
Run Code Online (Sandbox Code Playgroud)

怎么能解决不了System.String?我该如何进一步调试?

Nko*_*osi 24

Asp.Net Core中的默认DI框架受限于可用的功能.假设一个类构造函数

public MyService(string dependencyString) {
    //...
}
Run Code Online (Sandbox Code Playgroud)

容器无法知道要将哪个值用于要注入服务的依赖字符串.

在上述情况下,string在将服务添加到集合时,可以使用其中一个重载来提供缺失.

//...

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

//...
Run Code Online (Sandbox Code Playgroud)

这样,当服务被激活时,它可以正确返回.


文档参考:ASP.NET Core中的依赖注入 - > 构造函数注入行为(v2.1)