[英]Use dependance injection trough constructor with Azure Functions
我已經使用 .NET 5 和依賴注入通過類的構造函數創建了 Azure Function 版本 3。 請參閱下面的虛擬代碼:
public class MyAzureFunction
{
private readonly IMyRepository _myRepository;
public MyAzureFunction(IMyRepository myRepository)
{
_myRepository = myRepository;
}
[Function("MyAzureFunction")]
public async Task Run([TimerTrigger("0 */15 * * * *")] TimerInfo myTimer, FunctionContext context)
{
ILogger logger = context.GetLogger("MyAzureFunction");
logger.LogInformation($"C# Timer trigger function executed at: {DateTime.Now}");
List<object> result = await _myRepository.GetAllAsync();
// Keep going...
}
}
在Startup
類中添加了作用域。
[assembly: FunctionsStartup(typeof(MyNamespace.Functions.Startup))]
namespace MyNamespace.Functions
{
public class Startup : FunctionsStartup
{
public override void Configure(IFunctionsHostBuilder builder)
{
builder.Services
.AddScoped<IMyRepository, MyRepository>();
}
}
}
程序文件如下所示:
public class Program
{
public static void Main()
{
IHost host = new HostBuilder()
.ConfigureFunctionsWorkerDefaults()
.Build();
host.Run();
}
}
在.csproj
文件中,有這行代碼:
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<AzureFunctionsVersion>v3</AzureFunctionsVersion>
<OutputType>Exe</OutputType>
</PropertyGroup>
問題是當我想運行 Azure 函數時。 我有這個警告:
沒有找到工作職能。 嘗試公開您的作業類和方法。 如果您使用綁定擴展(例如 Azure Storage、ServiceBus、Timers 等),請確保您已在啟動代碼中調用了擴展的注冊方法(例如
builder.AddAzureStorage()
、builder.AddServiceBus()
、builder.AddTimers()
等) 。
我已經嘗試了接下來的事情:
我在Startup
類中添加了builder.AddTimers()
但IFunctionsHostBuilder
包含它的定義。 即使我添加Microsoft.Azure.Functions.Worker.Extensions.Timer
。
將MyAzureFunction
所有內容MyAzureFunction
靜態但不起作用,因為靜態構造函數不能包含參數。
此外builder.Services.AddTimers()
(如在文檔中)未定義。
我現在的問題是如何使用 Azure Functions 和 .NET 5 使用構造函數使用依賴項注入。
在 Program.cs 中做以下事情。 (確保為命名空間添加引用)
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
namespace FunctionApp2
{
public class Program
{
public static void Main()
{
var host = new HostBuilder()
.ConfigureServices(services =>
{
services.AddScoped<IMyRepository, MyRepository>();
})
.ConfigureFunctionsWorkerDefaults()
.Build();
host.Run();
}
}
}
您需要添加包 - Microsoft.Azure.Functions.Extensions
- Microsoft.Azure.Functions.Worker
- Microsoft.Azure.Functions.Worker.Sdk
然后確保刪除了之前用於 net core 3 的包
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.