簡體   English   中英

將依賴注入槽構造函數與 Azure Functions 結合使用

[英]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()等)

我已經嘗試了接下來的事情:

  1. 我在Startup類中添加了builder.AddTimers()IFunctionsHostBuilder包含它的定義。 即使我添加Microsoft.Azure.Functions.Worker.Extensions.Timer

  2. MyAzureFunction所有內容MyAzureFunction靜態但不起作用,因為靜態構造函數不能包含參數。

  3. 此外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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM