C# .NET核心依赖注入;无法解析类型为';System.String';试图激活服务时
我有一个服务和一个模型来获取其构造函数的参数,然后控制器使用该服务。我也使用依赖项注入,但我不太清楚如何声明服务,因为它需要一个参数。 我已经研究过另一个类似的问题,但没有一个答案对我有效。我得到的错误是:“在尝试激活“authentication.Services.RDStationServices.RDStationService”时,无法解析类型为“System.String”的服务。” 与此相关的代码:C# .NET核心依赖注入;无法解析类型为';System.String';试图激活服务时,c#,asp.net-core,dependency-injection,C#,Asp.net Core,Dependency Injection,我有一个服务和一个模型来获取其构造函数的参数,然后控制器使用该服务。我也使用依赖项注入,但我不太清楚如何声明服务,因为它需要一个参数。 我已经研究过另一个类似的问题,但没有一个答案对我有效。我得到的错误是:“在尝试激活“authentication.Services.RDStationServices.RDStationService”时,无法解析类型为“System.String”的服务。” 与此相关的代码: public class RDStationService : IRDStation
public class RDStationService : IRDStationService
{
public RDStationService(string server)
{
_endPoint = server;
_client = new RestClient
{
BaseUrl = new Uri(_endPoint)
};
}
}
型号:
public class RDStationOptions
{
public string Url { get; set; }
}
环境变量:
"RDStationOptions": {
"Url": "https://www.rdstation.com.br/api/1.3/"}
启动:
public void ConfigureServices(IServiceCollection services)
{
var configOptionsRDStation = Configuration.GetSection(nameof(RDStationOptions));
var _rdStationInstance = new RDStationService(configOptionsRDStation[nameof(RDStationOptions.Url)]);
services.AddSingleton(_rdStationInstance);
}
ConfigureServices中的此配置是我最近一次尝试将字符串通知构造函数,但我一直收到相同的错误。
有什么建议吗?因为您使用的是ASP.NET Core,我假设您的
配置
实例是IConfiguration类型
。这应该适合您:
public void ConfigureServices(IServiceCollection services)
{
var configOptionsRDStation = Configuration.GetSection("RDStationOptions : Url");
var _rdStationInstance = new RDStationService(configOptionsRDStation.Value);
services.AddSingleton(_rdStationInstance);
}
如果要使用IOptions
:
services.Configure<RDStationOptions>(Configuration.GetSection("RDStationOptions"));
services.AddOptions()
services.Configure(Configuration.GetSection(“RDStationOptions”);
services.AddOptions()
您发布的代码按预期工作。我觉得您的错误是由其他代码引起的。可能会发布其余的配置
我希望在某个地方发生这种情况的一个例子:
services.AddSingleton(_rdStationInstance);
// Will NOT work, will created a scoped RDStationService and try to resolve string
services.AddScoped<IRDStationService, RDStationService>();
services.AddSingleton(\rdStationInstance);
//将无法工作,将创建一个作用域RDStationService并尝试解析字符串
services.addScope();
尝试使用选项
我想最好的主意是您使用的是哪一个DI库?显示您的服务DI注册,我确信您没有在constructorMicrosoft.Extensions.DependencyInjection中指定字符串值。不要只是发布链接,解释并说明那里描述的内容。必须处理关于空变量的错误,但现在它终于可以工作了!谢谢!