我使用 .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
class 添加了范围。
[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
文件里有这行代码:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net5.0</TargetFramework>
<AzureFunctionsVersion>v3</AzureFunctionsVersion>
<OutputType>Exe</OutputType>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Azure.Functions.Extensions" Version="1.1.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Extensions.Timer" Version="4.1.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.3.0" />
<PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.6.0" />
</ItemGroup>
<!-- Skiped some lines -->
</Project>
问题是当我想运行Azure Function时。我收到这个警告:
未找到工作职能。尝试公开您的工作类别和方法。如果您使用绑定扩展(例如 Azure 存储、ServiceBus、计时器等)确保您已在启动代码中调用了扩展程序的注册方法(e.g. builder.AddAzureStorage()
, builder.AddServiceBus()
, builder.AddTimers()
, etc.).
我尝试过接下来的事情:
-
我已经添加builder.AddTimers()
在 - 的里面Startup
类但是IFunctionsHostBuilder
不包含它的定义。即使我添加Microsoft.Azure.Functions.Worker.Extensions.Timer https://www.nuget.org/packages/Microsoft.Azure.Functions.Worker.Extensions.Timer.
-
使内部一切都静态MyAzureFunction
但不起作用,因为静态构造函数不能包含参数。
-
Also builder.Services.AddTimers()
(像文档 https://learn.microsoft.com/en-us/azure/azure-functions/functions-dotnet-dependency-injection#register-services)没有定义。
我现在的问题是如何使用 Azure Functions 和 .NET 5 使用构造函数来使用依赖项注入。