尝试激活 'MyService' 时无法解析类型 'System.String' 的服务
Unable to resolve service for type 'System.String' while attempting to activate 'MyService'
我在我的 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
?我该如何进一步调试?
Asp.NetCore 中的默认 DI 框架在可用功能方面受到限制。
假设 class 构造函数像
public MyService(string dependencyString) {
//...
}
容器无法知道将什么值用于要注入到服务中的依赖字符串。
在上述情况下,可以在将服务添加到集合时使用其中一种重载来提供缺少的 string
。
//...
services.AddScoped<IMyService>(_ => new MyService("value here"));
//...
这样在激活服务的时候可以正常返回。
文档参考:Dependency injection in ASP.NET Core -> Constructor injection behavior (v2.1)
我在我的 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
?我该如何进一步调试?
Asp.NetCore 中的默认 DI 框架在可用功能方面受到限制。 假设 class 构造函数像
public MyService(string dependencyString) {
//...
}
容器无法知道将什么值用于要注入到服务中的依赖字符串。
在上述情况下,可以在将服务添加到集合时使用其中一种重载来提供缺少的 string
。
//...
services.AddScoped<IMyService>(_ => new MyService("value here"));
//...
这样在激活服务的时候可以正常返回。
文档参考:Dependency injection in ASP.NET Core -> Constructor injection behavior (v2.1)