.NET核心依赖注入;尝试激活服务

时间:2019-02-21 15:08:05

标签: c# asp.net-core dependency-injection

我有一个服务和一个模型来为其构造函数获取参数,然后控制器使用该服务。我还使用了依赖注入,并且我不太清楚如何声明服务,因为它需要一个参数。 我已经研究了另一个类似的问题,但是似乎没有一个答案对我有用。我得到的错误是:“尝试激活'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 中的此配置是我向字符串通知构造函数的最新尝试,但我一直遇到相同的错误。 有什么建议吗?

3 个答案:

答案 0 :(得分:0)

由于您使用的是ASP.NET Core,因此我假设您的Configuration实例是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()

答案 1 :(得分:0)

您发布的代码可以正常工作。我认为您的错误是由其他代码引起的。也许发布其余的配置。

我希望发生这种情况的示例:

services.AddSingleton(_rdStationInstance);

// Will NOT work, will created a scoped RDStationService and try to resolve string
services.AddScoped<IRDStationService, RDStationService>();

答案 2 :(得分:-1)