我使用 .NET 5 创建了一个 Azure 函数版本 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
文件中有这行代码:
<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 函数时。我有这个警告:
未找到作业函数。试着公开你的作业类和方法。如果您使用的是绑定扩展(例如Azure存储、ServiceBus、定时器等),请确保您在启动代码中调用了扩展的注册方法(例如builder.AddAzureStorage()
、builder)。AddServiceBus()
,生成器。AddTimers()
,等等)。
我试过以下几件事:
>
我已经添加了构建器。Startup 类中的 AddTimers(),
但 IFunctionsHostBuilder
不包含它的定义。即使我添加了
Microsoft.Azure.Functions.Worker.Extensions.Timer
。
使< code>MyAzureFunction中的所有内容都是静态的,但是不起作用,因为静态构造函数不能包含参数。
还有builder.Services。AddTimers()
(与文档中一样)未定义。
我现在的问题是,如何使用Azure函数进行依赖注入,以及如何使用构造函数进行.NET5。
您需要添加包:
> 微软公司。azure . functions . extensions
Microsoft.Azure.Functions.Worker
Microsoft.Azure.Functions.Worker.Sdk代码
然后确保删除了以前的.NET Core 3包。
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();
}
}
}
我有一个时间触发的Azure功能
我有一个关于 azure 函数 v1 中的依赖注入的新问题。 实际情况: 我有一个azure函数V1,我想在其中引用我的业务服务,而无需重新发明轮子即可使用我的服务。我在Internet上搜索并找到了这篇来自Microsoft的有趣文章。 但是,它似乎只适用于azure函数v2(. net core),因为每当我尝试安装时,我总是收到以下错误: 检测到Microsoft.Azure.WebJobs
设置一个引用其他网络标准项目的 Azure 函数,这些项目又引用 Microsoft.Extensions.Logging。 当函数在本地运行时,没有任何对其他项目的引用,一切开始都很好。但是,一旦我添加了对其他项目之一的引用,我就会在启动时收到以下异常: TestTrigger: Microsoft.Azure.WebJobs.Host: Error indexing method 'TestT
我已经成功地将依赖注入用于我自己的自定义服务,如本文所述。 我想要的是在我的定制服务中使用框架作为参数注入Azure函数的绑定器。用作函数参数的示例: 我尝试将Binder作为参数添加到我的服务构造函数并让框架创建我的服务实例,但传入的Binder始终为空。 我的服务构造函数: 注册如下: 有人知道这是否可能吗?如果可能,我做错了什么?
我试图使用.NET5运行一个Azure功能项目(v3),但是我得到了一个错误,没有找到作业功能。确切的错误是: 未找到作业函数。请尝试将作业类和方法公开。如果使用绑定扩展(例如Azure存储、ServiceBus、计时器等),请确保已在启动代码(例如builder.AddAzureStorage()、builder.AddServiceBus()、builder.AddTimers()等)中调用扩
我试图实现的是,我希望能够创建一个Azure函数,该函数将使用YouTube API将视频上传到YouTube。例如:https://developers.google.com/youtube/v3/docs/videos/insert .创建 Azure 函数后,我想在 Azure 逻辑应用中使用该函数。下面是 Azure 函数的代码(上移的视频): 当我运行这段代码时,我没有看到这样的预期结果