C# 使用控制器asp.net-core v1.1.0外部的依赖项注入进行应用程序设置
我正在使用asp.net-core v1.1.0:) 我想从服务类而不是控制器访问应用程序设置值,我的代码是: appsettings.jsonC# 使用控制器asp.net-core v1.1.0外部的依赖项注入进行应用程序设置,c#,asp.net-core,asp.net-core-mvc,C#,Asp.net Core,Asp.net Core Mvc,我正在使用asp.net-core v1.1.0:) 我想从服务类而不是控制器访问应用程序设置值,我的代码是: appsettings.json // appsettings.json { "ImagesDBSettings": { "Endpoint": "", "Key": "", } } Startup.cs // Startup.cs ... public void ConfigureServices(IServiceCollection services) {
// appsettings.json
{
"ImagesDBSettings": {
"Endpoint": "",
"Key": "",
}
}
Startup.cs
// Startup.cs
...
public void ConfigureServices(IServiceCollection services)
{
...
services.AddOptions();
services.Configure<ImagesDBSettings>(Configuration.GetSection("ImagesDBSettings"));
...
}
...
ImagesDBService.cs
// ImagesDBService.cs
public class ImagesDBService
{
private readonly ImagesDBSettings _settings;
public ImagesDBService(IOptions<ImagesDBSettings> settings)
{
_settings = settings.Value;
}
}
//ImagesDBService.cs
公共类ImagesDBService
{
私有只读图像设置\u设置;
公共图像服务(IOPS设置)
{
_设置=设置.值;
}
}
在编译时,我得到一个错误:
没有给出与“ImagesDBService.ImagesDBService(IOptions)”的必需形式参数“settings”对应的参数
关于如何使依赖项注入工作有什么想法吗?您说这是一个编译错误,因此可能与DI无关,您更可能缺少
IOptions
名称空间
如果尚未安装,请安装软件包:
然后引用名称空间
Microsoft.扩展.选项
到您的类ImagesDBService
IOptions依赖性将不会随显示的代码注入ImagesDBService。为此,您需要在startup.cs中使用AddTransient。对于DI外部控制器,请参见此。或者,您可以从控制器向服务类传递IOptions(不是最佳选项)
Startup.cs:
public void ConfigureServices(IServiceCollection services)
{
AppSettings.ConnectionString = Configuration.GetConnectionString("DefaultConnection");
}
该类已包含使用Microsoft.Extensions.Options的
代码>:(是否还有其他代码,或者您发布的是您的类的确切形状?它是否继承自其他类?您的意思是“在执行时”而不是“在编译时”?感谢您的帮助Klinger,是在编译时,是在vscode上我执行“运行”命令,编译器在编译步骤中抛出该错误。ImagesDBService不会从另一个类继承。我唯一能想到的是,您缺少一个引用。您是否有任何从ImagesDBService
派生的类型?最后,我刚刚放弃了,仍然需要使用该控制器的临时选项,wh目前,我正在寻找的(问题中没有解释)是从独立于任何控制器或Startup.cs的类访问配置文件
public IActionResult Index(IOptions<ImagesDBSettings> settings)
{
ImagesDBService ss = new ImagesDBService(settings);
return View();
}
public static class AppSettings
{
public static string ConnectionString { get; set; }
}
public void ConfigureServices(IServiceCollection services)
{
AppSettings.ConnectionString = Configuration.GetConnectionString("DefaultConnection");
}