[英]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.