Azure函数V2依赖关系注入,其中选项和设置未填充选项对象

问题描述 投票:-2回答:1

我正在密切关注此pattern,将其用作示例代码:

使用选项和设置

在应用程序设置中定义的值在IConfiguration实例中可用,它使您可以在启动类中读取应用程序设置值。

您可以将IConfiguration实例中的值提取到自定义中类型。将应用程序设置值复制到自定义类型可轻松实现通过使这些值可注入来测试您的服务。设定已读取配置实例中必须是简单的键/值对。

考虑下面的类,该类包含名为consistent的属性使用应用程序设置。

public class MyOptions
{
    public string MyCustomSetting { get; set; }
}

从Startup.Configure方法内部,您可以从使用以下命令将IConfiguration实例转换为自定义类型代码:

builder.Services.AddOptions<MyOptions>()
                .Configure<IConfiguration>((settings, configuration) =>
                   {
                        configuration.Bind(settings);
                   });

调用绑定复制具有匹配属性名称的值(来自配置到自定义实例中。选项实例现在是可在IoC容器中插入到函数中。

options对象作为通用IOptions接口。使用Value属性访问您的配置中找到的值。

using System;
using Microsoft.Extensions.Options;

public class HttpTrigger
{
    private readonly MyOptions _settings;

    public HttpTrigger(IOptions<MyOptions> options)
    {
        _settings = options.Value;
    }
}

有关更多详细信息,请参考ASP.NET Core中的“选项”模式。使用选项。

链接中唯一没有的是local.settings.json的示例:

{
     "IsEncrypted": false,
     "Values": {
        "MyCustomSetting": "foo"
      }
}

将与MyOptions对象中的属性匹配。

正在创建options对象,并将其注入到我的函数中。但是,它并没有按照本文的指示来获取环境值。我看到了其他工作示例,这些示例通过直接绑定到设置文件来填充options对象。这不是生产解决方案。需要从环境中提取变量,以使它们在所有正在运行的情况下都能正常工作。

如本例中所示,有人能够从环境中获取options对象吗?在FunctionStartup中可以使用环境吗?

我可以让Environment在函数本身中本地和在Azure上加载和提取设置。我想遵循此示例,并在FunctionStartup类中执行一次,然后将其注入到每个函数中。这种方法将依赖于Azure功能设置,而不必依赖local.settings.json,后者仅在本地开发环境中可用。

c# dependency-injection .net-core azure-functions .net-core-configuration
1个回答
0
投票

答案是,这很完美。

我的实现无法正常运行b / c,我没有正确创建JSON文件。它没有标记为在构建时要复制。一旦我为该构建正确标记了该文件,它就会移到上方并创建设置。

我正在测试以确保我们也从Azure设置中提取。

此实现应避免在启动时添加文件监视程序而造成的问题。

© www.soinside.com 2019 - 2024. All rights reserved.