不包含选项和设置的Azure Functions V2依赖项注入

时间:2019-12-12 15:38:48

标签: c# dependency-injection .net-core azure-functions .net-core-configuration

我对这个pattern的关注程度很近,可以用作我的示例代码:

  

使用选项和设置

     

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

     

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

     

请考虑以下类,该类包含名为consistent的属性   带有应用设置。

value = max(value)
     

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

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

Calling Bind会从   配置到自定义实例中。选项实例现在是   可在IoC容器中插入到函数中。

     

options对象作为函数的一个实例注入到函数中   通用builder.Services.AddOptions<MyOptions>() .Configure<IConfiguration>((settings, configuration) => { configuration.Bind(settings); }); 接口。使用Value属性访问   您的配置中找到的值。

IOptions
     

有关ASP.NET Core的更多选项,请参阅   使用选项。

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

using System;
using Microsoft.Extensions.Options;

public class HttpTrigger
{
    private readonly MyOptions _settings;

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

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

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

是否有人能够像本例中那样从环境中填充options对象?在FunctionStartup中可以使用环境吗?

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

1 个答案:

答案 0 :(得分:1)

答案是,这很完美。

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

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

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