当前位置: 首页 > 知识库问答 >
问题:

具有依赖注入的Azure函数未找到作业函数

邓仲卿
2023-03-14

我使用 .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。

  • 共有2个答案

    龙承颜
    2023-03-14

    您需要添加包:

    > 微软公司。azure . functions . extensions

    Microsoft.Azure.Functions.Worker

    Microsoft.Azure.Functions.Worker.Sdk代码

    然后确保删除了以前的.NET Core 3包。

    弘承运
    2023-03-14

    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 函数的代码(上移的视频): 当我运行这段代码时,我没有看到这样的预期结果