gpt4 book ai didi

c# - 如何在 .NET 5 控制台应用程序中使用 Autofac 和选项模式?

转载 作者:行者123 更新时间:2023-12-05 02:39:56 26 4
gpt4 key购买 nike

我正在尝试将选项模式与 Autofac 一起使用,但每次尝试都会导致错误。

我尝试过的:

  1. 使用 ConfigurationBuilder 检索 IConfiguration/IConfigurationRoot。
  2. 注册 TestSectionOptions 的一个实例使用之前创建的 IConfiguration/IConfigurationRoot: builder.Register(c => config.GetSection("TestSection").Get<TestSectionOptions>());
  3. 尝试通过构造函数注入(inject)来注入(inject)它:
private readonly TestSectionOptions _options;

public DemoClass(IOptions<TestSectionOptions> options)
{
_options = options.Value;
}

我收到以下错误:

DependencyResolutionException: None of the constructors found with'Autofac.Core.Activators.Reflection.DefaultConstructorFinder' on type'DemoApp.DemoClass' can be invoked with the available services and parameters:Cannot resolve parameter'Microsoft.Extensions.Options.IOptions1[DemoApp.TestSectionOptions] options' of constructor 'Void .ctor(Microsoft.Extensions.Options.IOptions1

当然,我尝试了其他类型的注册,但都没有用。我也知道我可以简单地将配置文件绑定(bind)到一个类,然后我在没有 IOptions<> 部分的情况下注册和注入(inject)。但这将不再与期权模式完全对应,对吗?即使没有太大区别,我仍然想知道为什么它不起作用以及如何让它起作用。

最佳答案

问题是这个 IOptions 类型应该在某处注册。

你可以看到例如this article .有个例子

public void ConfigureServices(IServiceCollection services)
{
services.Configure<PositionOptions>(Configuration.GetSection(
PositionOptions.Position));
services.AddRazorPages();
}

因此,在 Configure 扩展方法内部的某处,它注册了选项的类型,其中包括 IOptions<>。

因此,在您的情况下,您要么必须明确地执行此操作,例如

builder.Register(c => Options.Create(config.GetSection("TestSection").Get<TestSectionOptions>()))

这将注册 IOptions

或者,您可以创建一个空的服务集合,然后在其上调用 Configure 方法,然后将所有注册复制到 autofac 构建器——“Autofac.Extensions.DependencyInjection”包中有 Populate 方法

https://autofac.org/apidoc/html/B3162450.htm

关于c# - 如何在 .NET 5 控制台应用程序中使用 Autofac 和选项模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68861653/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com