Azure持久功能:我可以使用startup.cs吗?
我有两个函数,我想将它们重构为Azure持久函数,其中orchestrator调用不同的ActivityFunctions(以前分离的Azure函数)。单独的函数使用一个启动,我在其中配置依赖项注入和一些其他配置。 是否可以在持久函数方案中使用启动类?我在报纸上找不到任何似乎暗示这一点的东西 如果不可能,还有什么其他替代方案,例如,定义数据库连接字符串和依赖项注入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安装并添加对
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”的配置