Gab*_*ton 7 c# dependency-injection .net-5
当我尝试解析 IOptionsSnapshot 服务时,出现以下异常:
“无法从根提供程序解析范围服务“Microsoft.Extensions.Options.IOptionsSnapshot`1[Test.MyOptions]”。”
如果有人可以告诉我问题,我将测试代码留在下面。
主要的
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System.IO;
class Program
{
static void Main(string[] args)
{
var configuration = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("AppSettings.json", optional: false, reloadOnChange: true)
.AddJsonFile("MyOptions.json", optional: false, reloadOnChange: true)
.AddEnvironmentVariables()
.Build();
var services = new ServiceCollection();
var provider = services.Configure<MyOptions>(configuration.GetSection(nameof(MyOptions))).BuildServiceProvider(true);
var test = provider.GetRequiredService<IOptionsSnapshot<MyOptions>>();
}
}
Run Code Online (Sandbox Code Playgroud)
我的选项类
public class MyOptions
{
public int Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我的选项.json
{
"MyOptions": {
"Value": 10
}
}
Run Code Online (Sandbox Code Playgroud)
Kir*_*kin 14
IOptionsSnapshot<T>注册为范围服务,这意味着您需要创建一个服务范围,然后使用该范围进行解析:
using (var scope = provider.CreateScope())
{
var scopedProvider = scope.ServiceProvider;
var test = scopedProvider.GetRequiredService<IOptionsSnapshot<MyOptions>>();
//...
}
Run Code Online (Sandbox Code Playgroud)