Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET核心依赖注入;无法解析类型为';System.String';试图激活服务时_C#_Asp.net Core_Dependency Injection - Fatal编程技术网

C# .NET核心依赖注入;无法解析类型为';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

我有一个服务和一个模型来获取其构造函数的参数,然后控制器使用该服务。我也使用依赖项注入,但我不太清楚如何声明服务,因为它需要一个参数。 我已经研究过另一个类似的问题,但没有一个答案对我有效。我得到的错误是:“在尝试激活“authentication.Services.RDStationServices.RDStationService”时,无法解析类型为“System.String”的服务。”

与此相关的代码:

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中指定字符串值。不要只是发布链接,解释并说明那里描述的内容。必须处理关于空变量的错误,但现在它终于可以工作了!谢谢!