You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Functions v3 控制器使用[FromServices]出现构建错误该如何解决

版本兼容性说明

你使用的Microsoft.NET.Sdk.Functions 3.0.13与Microsoft.Azure.Functions.Extensions 1.1.0确实存在兼容性问题。
Microsoft.Azure.Functions.Extensions 1.1.0要求最低Microsoft.NET.Sdk.Functions版本为3.0.37,低于该版本的3.x SDK无法适配1.1.0版本的依赖注入扩展,会导致[FromServices]特性相关的构建错误。
推荐的版本组合方案:

  • 若保持使用3.0.x版本的SDK:将Microsoft.Azure.Functions.Extensions降级到1.0.0版本,该组合经过官方验证可稳定支持依赖注入功能
  • 若想使用1.1.0及以上版本的扩展:将Microsoft.NET.Sdk.Functions升级到3.0.37及以上的3.x最新稳定版,或直接升级到4.x版本的SDK(对应Azure Functions 4.x运行时,向下兼容3.x的代码逻辑)
可行替代方案

如果暂时不想调整包版本,可以使用以下两种稳定的依赖注入方案:

1. 构造函数注入(最推荐)

Azure Functions进程内模型原生支持构造函数注入,不需要额外特性标记,稳定性最高,示例代码如下:

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Extensions.Http;
using Microsoft.Extensions.Logging;
using System.Threading.Tasks;

namespace SubscriptionManager.Functions
{
    public class TestFunction
    {
        private readonly ISubscriptionService _subscriptionService;
        private readonly IAccountService _accountService;

        // 直接在构造函数中声明需要注入的服务即可
        public TestFunction(ISubscriptionService subscriptionService, IAccountService accountService)
        {
            _subscriptionService = subscriptionService;
            _accountService = accountService;
        }

        [FunctionName("TestFunction")]
        public async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
            ILogger log)
        {
            // 直接使用注入的服务实例
            var subscriptions = await _subscriptionService.GetAllAsync();
            return new OkObjectResult(subscriptions);
        }
    }
}

2. 手动从ExecutionContext获取服务

如果仅在单个函数入口中需要使用某服务,不想为整个类注入,可以从执行上下文手动获取服务提供器解析实例:

[FunctionName("TestFunction")]
public async Task<IActionResult> Run(
    [HttpTrigger(AuthorizationLevel.Function, "get", Route = null)] HttpRequest req,
    ExecutionContext executionContext,
    ILogger log)
{
    var serviceProvider = executionContext.FunctionAppServices;
    var subscriptionService = serviceProvider.GetRequiredService<ISubscriptionService>();
    // 后续使用服务实例
}

内容的提问来源于stack exchange,提问作者adriana malea

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 21:45:01