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