Md *_*lam 13 configuration .net-core azure-functions .net-5
我创建了一个基于 HTTP 触发器的 .Net 5 Azure FunctionApp 并尝试为我的服务类配置数据库连接字符串和依赖项注入,但是我不知道如何从 Program.cs 调用 Startup.cs 文件的配置方法主功能。我是基于 FunctionApp 的托管新手。
我在 Program.cs 文件中尝试过使用 IHostBuilder,如下所示,但它说:“不包含ConfigureWebHostDefaults 的定义”甚至使用了命名空间 => using Microsoft.AspNetCore.Hosting;
public static void Main(string[] args)
{
var host = new HostBuilder().ConfigureFunctionsWorkerDefaults()
.Build();
//CreateHostBuilder(args).Build().Run();
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
Run Code Online (Sandbox Code Playgroud)
我的 Startup.cs 文件,
[assembly: FunctionsStartup(typeof(Startup))]
namespace kpi
{
public class Startup : FunctionsStartup
{
private static IConfiguration _configuration = null;
public override void Configure(IFunctionsHostBuilder builder)
{
var serviceProvider = builder.Services.BuildServiceProvider();
_configuration = serviceProvider.GetRequiredService<IConfiguration>();
var appSettingsSection = _configuration.GetSection("AppSetting");
builder.Services.Configure<AppSetting>(appSettingsSection);
var appSettings = appSettingsSection.Get<AppSetting>();
RuntimeConfig.appsettings = appSettings;
var ConnectionString = RuntimeConfig.appsettings.AppDBConnection;
builder.Services.AddDbContext<ShardingDbContext>(options =>
options.UseSqlServer(ConnectionString), ServiceLifetime.Transient);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我已经使用了 FunctionStartup 程序集,我不知道哪里出了问题,任何人都可以帮助我从 Startup.cs 文件配置我的连接字符串吗?
Mét*_*ule 36
Azure 函数有两种风格,两者之间的依赖项注入配置不同。来自文档:
以前,Azure Functions 仅支持 .NET 函数的紧密集成模式,该模式作为类库在与主机相同的进程中运行。这种模式提供了主机进程和功能之间的深度集成。例如,.NET 类库函数可以共享绑定 API 和类型。然而,这种集成还需要主机进程和.NET 功能之间更紧密的耦合。例如,进程内运行的 .NET 函数需要在与 Functions 运行时相同的 .NET 版本上运行。为了使您能够在这些限制之外运行,您现在可以选择在隔离的进程中运行。这种进程隔离还允许您开发使用当前 .NET 版本(例如 .NET 5.0)的函数,而 Functions 运行时本身不支持这些函数。
这两种模式之间存在很多差异,因此请务必检查它们以选择符合您要求的模式。
通过此配置,您的 Azure 函数与主机运行时紧密耦合。在撰写本文时,这意味着您的 Azure 函数无法在 .NET5 上运行。
您将需要以下 NuGet 包:
Microsoft.Azure.Functions.ExtensionsMicrosoft.NET.Sdk.Functions版本 1.0.28 或更高版本Microsoft.Extensions.DependencyInjection该FunctionsStartup属性与类一起使用Startup:
using Microsoft.Azure.Functions.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
[assembly: FunctionsStartup(typeof(MyNamespace.Startup))]
namespace MyNamespace
{
public class Startup : FunctionsStartup
{
public override void ConfigureAppConfiguration(IFunctionsConfigurationBuilder builder)
{
var context = builder.GetContext();
// optional: customize your configuration sources
// here, we add appsettings.json files
// Note that these files are not automatically copied on build or publish.
builder.ConfigurationBuilder
.AddJsonFile(Path.Combine(context.ApplicationRootPath, "appsettings.json"), optional: true, reloadOnChange: false)
.AddJsonFile(Path.Combine(context.ApplicationRootPath, $"appsettings.{context.EnvironmentName}.json"), optional: true, reloadOnChange: false);
}
public override void Configure(IFunctionsHostBuilder builder)
{
// get the configuration from the builder
var configuration = builder.GetContext().Configuration;
}
}
Run Code Online (Sandbox Code Playgroud)
请在此处查看更多信息:https ://learn.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection
在此模式下,Azure 函数与主机运行时完全解耦(这与允许使用 C# 以外的语言编写 Azure 函数的模式相同)。您负责创建主机。
您将需要以下 NuGet 包:
Microsoft.Azure.Functions.WorkerMicrosoft.Azure.Functions.Worker.SdkMicrosoft.Azure.Functions.Worker.Extensions这里没有Startup班级;您负责自己创建主机Program.cs:
using Microsoft.Extensions.Hosting;
public static async Task Main(string[] args)
{
var builder = Host
.CreateDefaultBuilder(args)
.ConfigureFunctionsWorkerDefaults()
.ConfigureAppConfiguration((hostingContext, configBuilder) =>
{
// optional: customize your configuration sources
// here, we add appsettings.json files
// Note that these files are not automatically copied on build or publish.
var env = hostingContext.HostingEnvironment;
configBuilder
.AddJsonFile($"appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true, reloadOnChange: true)
;
})
.ConfigureServices((appBuilder, services) =>
{
var configuration = appBuilder.Configuration;
});
await builder.Build().RunAsync();
}
Run Code Online (Sandbox Code Playgroud)
请在此处查看更多信息:https ://learn.microsoft.com/en-us/azure/azure-functions/dotnet-isolated-process-guide
appsettings.json文件复制到输出目录默认情况下,Azure 函数不识别appsettings.json文件。您需要通过将它们添加到应用程序配置中ConfigureAppConfiguration,但还需要将它们复制到输出目录,否则函数应用程序将无法找到它们。
为此,请将以下行添加到您的.csproj:
<ItemGroup>
<None Include="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
<None Include="appsettings.*.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<DependentUpon>appsettings.json</DependentUpon>
</None>
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15562 次 |
| 最近记录: |