Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.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
Dependency injection 如何将选项对象添加为服务?_Dependency Injection_Asp.net Core 3.1 - Fatal编程技术网

Dependency injection 如何将选项对象添加为服务?

Dependency injection 如何将选项对象添加为服务?,dependency-injection,asp.net-core-3.1,Dependency Injection,Asp.net Core 3.1,在我的ASP.NET核心应用程序中,配置通常不会更改。因此,我想在ConfigureServices(IServiceCollection services)中创建一个类型化选项对象,并使用services.AddSingleton(typeof(IOptions),configuration.Get())将该对象作为单例添加到服务中 但是ASP.NET核心不允许向ConfigureServices(IServiceCollection services)方法添加额外的参数 因此,以下是不可能的

在我的ASP.NET核心应用程序中,配置通常不会更改。因此,我想在
ConfigureServices(IServiceCollection services)
中创建一个类型化选项对象,并使用
services.AddSingleton(typeof(IOptions),configuration.Get())将该对象作为单例添加到服务中

但是ASP.NET核心不允许向
ConfigureServices(IServiceCollection services)
方法添加额外的参数

因此,以下是不可能的:


公共接口IOptions{…}
公共类选项:IOptions{…}
...
public void配置服务(IServiceCollection服务、IConfiguration配置)
{
服务
.AddSingleton(typeof(IOptions),configuration.Get())
.AddControllers();
}

是否有办法实现这一点(即,将由ASP.NET配置服务配置的选项对象添加到服务集合)?

解决方案就在眼前,我忽略了它:

IConfiguration
在启动时作为成员字段可用,因此它已经可用,无需再次作为附加参数提供:

公共类启动
{
专用只读IConfiguration\u配置;
公共启动(IConfiguration配置)=>\u配置=配置;
//此方法由运行时调用。使用此方法将服务添加到容器以进行依赖项注入。
public void配置服务(IServiceCollection服务)
{
服务
.AddSingleton(_configuration.GetSection(“AppSettings”).Get())
.AddControllers();
}
//此方法由运行时调用。请使用此方法配置HTTP请求管道。
public void配置(IApplicationBuilder应用程序、IWebHostEnvironment环境、选项)
{
Context.ConnectionString=options.DbConStr;
}
}

如何创建“选项/配置”。。?为什么需要这个额外的参数?请记住,IoC尚未启动。请参见上面的示例代码:
Options
类是一个本地类。应该从任何配置提供程序(例如,
appsettings.json
)获取配置。请参阅(构建SP)和(使用函数生成单例值)。我不确定SC是否已经(或保证已经)在该点注册了IConfiguration,因此可能需要推迟。哦。。。谢谢你的链接。我昨天没看到这些。今天,我有了一个新的想法,甚至注意到,
IConfiguration
Startup
的成员,由DI提供。所以我不需要做任何事情——它已经存在了。我将为我的问题添加相应的解决方案。