Azure持久功能:我可以使用startup.cs吗?

Azure持久功能:我可以使用startup.cs吗?,azure,dependency-injection,azure-functions,azure-durable-functions,Azure,Dependency Injection,Azure Functions,Azure Durable Functions,我有两个函数,我想将它们重构为Azure持久函数,其中orchestrator调用不同的ActivityFunctions(以前分离的Azure函数)。单独的函数使用一个启动,我在其中配置依赖项注入和一些其他配置。 是否可以在持久函数方案中使用启动类?我在报纸上找不到任何似乎暗示这一点的东西 如果不可能,还有什么其他替代方案,例如,定义数据库连接字符串和依赖项注入 Thnx是的,您可以使用类似于正常函数的依赖项注入 我在这个依赖注入中发现的完整示例也可以在持久函数中使用 从Nuget安装并添加对

我有两个函数,我想将它们重构为Azure持久函数,其中orchestrator调用不同的ActivityFunctions(以前分离的Azure函数)。单独的函数使用一个启动,我在其中配置依赖项注入和一些其他配置。 是否可以在持久函数方案中使用启动类?我在报纸上找不到任何似乎暗示这一点的东西

如果不可能,还有什么其他替代方案,例如,定义数据库连接字符串和依赖项注入


Thnx

是的,您可以使用类似于正常函数的依赖项注入


我在这个

依赖注入中发现的完整示例也可以在持久函数中使用

从Nuget安装并添加对以下软件包的引用:

Microsoft.Azure.Functions.Extensions.DependencyInjection

以下是已完成依赖项注入的启动文件的工作示例:

using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Azure.WebJobs.Host.Bindings;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Options;
using System;


[assembly: FunctionsStartup(typeof(MyDurableFunction.Startup))]

namespace MyDurableFunction
{
    public class Startup : FunctionsStartup
    {
        public override void Configure(IFunctionsHostBuilder builder)
        {
            var executioncontextoptions = builder.Services.BuildServiceProvider()
                .GetService<IOptions<ExecutionContextOptions>>().Value;
            var currentDirectory = executioncontextoptions.AppDirectory;
            var environment = Environment.GetEnvironmentVariable("AZURE_FUNCTIONS_ENVIRONMENT");

            var config = new ConfigurationBuilder()
               .SetBasePath(currentDirectory)
               .AddJsonFile($"settings.{environment}.json", optional: false, reloadOnChange: false)
               .AddEnvironmentVariables()
               .Build();

            builder.Services.AddSingleton<IMyBusinessService1>(sp =>
            {
                var secretFromAppSettings = config["secretKey"];
                var passwordFromAppSettings = config["secretPassword"];
                return new MyBusinessService1(secretFromAppSettings, passwordFromAppSettings);
            });

            builder.Services.AddSingleton<IDatabaseHelper, DatabaseHelper>();

            builder.Services.AddLogging();
        }

    }
}
使用Microsoft.Azure.Functions.Extensions.DependencyInjection;
使用Microsoft.Azure.WebJobs.Host.Bindings;
使用Microsoft.Extensions.Configuration;
使用Microsoft.Extensions.DependencyInjection;
使用Microsoft.Extensions.Options;
使用制度;
[assembly:FunctionsStartup(typeof(MyDurableFunction.Startup))]
名称空间MyDurableFunction
{
公共类启动:函数启动
{
公共覆盖无效配置(IFunctionsHostBuilder)
{
var executioncontextoptions=builder.Services.BuildServiceProvider()
.GetService().Value;
var currentDirectory=executioncontextoptions.AppDirectory;
var-environment=environment.GetEnvironmentVariable(“AZURE_函数_环境”);
var config=new ConfigurationBuilder()
.SetBasePath(当前目录)
.AddJsonFile($“settings.{environment}.json”,可选:false,重载更改:false)
.AddenEnvironmentVariables()
.Build();
builder.Services.AddSingleton(sp=>
{
var secretFromAppSettings=config[“secretKey”];
var passwordFromAppSettings=config[“secretPassword”];
返回新的MyBusinessService1(secretFromAppSettings,passwordFromAppSettings);
});
builder.Services.AddSingleton();
builder.Services.AddLogging();
}
}
}

希望这有帮助

您能否确认是否有任何解决方案有助于解决您的问题?我想补充一点,即替换singleton
IConfiguration
是一种我们不推荐的模式,因为它会替换Azure功能主机使用的配置,包括但不限于host.json。我建议大家仔细阅读这个问题和解决方法@Sunny Sharma谢谢你详尽的回答。用你的例子来说,它现在对我有效。谢谢@ConnorMcMahon的提醒!我已经修改了代码,现在它还支持来自“host.json”的配置