繁体   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