Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/328.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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# 使用控制器asp.net-core v1.1.0外部的依赖项注入进行应用程序设置_C#_Asp.net Core_Asp.net Core Mvc - Fatal编程技术网

C# 使用控制器asp.net-core v1.1.0外部的依赖项注入进行应用程序设置

C# 使用控制器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) {

我正在使用asp.net-core v1.1.0:)

我想从服务类而不是控制器访问应用程序设置值,我的代码是:

appsettings.json

// 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");
}