Azure Functions中Dependency Injection依赖注入失效问题求助
问题根源
你当前的代码混用了Azure Functions两种托管模型的依赖注入配置逻辑,导致服务注册失效:
- 带有
[assembly: FunctionsStartup]标记的Startup类是进程内托管模型的依赖注入注册方式 - 包含
ConfigureFunctionsWorkerDefaults()调用的Program类是隔离进程(Isolated Worker)托管模型的启动配置逻辑,两种配置方式不能同时生效。
解决方案
以下两种方案二选一即可:
方案1:保留隔离进程托管模型
删除整个Startup类和对应的程序集属性,将服务注册逻辑迁移到Program类中:
namespace ZanettiClod.SampleAzureFunctions { public class Program { public static void Main() { var host = new HostBuilder() .ConfigureFunctionsWorkerDefaults() // 新增服务注册配置 .ConfigureServices(services => { services.AddHttpClient(); services.AddSingleton<IProductService, ProductService>(); services.AddSingleton<IProductRepository<Product>, ProductRepository>(); }) .Build(); host.Run(); } } }
修改完成后确认项目引用的是隔离进程模型对应的NuGet包:Microsoft.Azure.Functions.Worker、Microsoft.Azure.Functions.Worker.Extensions.Http等,不要引入进程内模型的Microsoft.Azure.Functions.Extensions包。
方案2:改用进程内托管模型
删除整个Program类,确认项目配置符合进程内模型要求:
- 项目.csproj文件中需包含如下配置:
<AzureFunctionsVersion>v4</AzureFunctionsVersion> <OutputType>Library</OutputType>
- 确保安装了进程内模型DI依赖包
Microsoft.Azure.Functions.Extensions,不要引入隔离进程相关的Worker系列包。
验证
修改完成后清理项目、重新生成,再启动本地调试即可正常解析注入的服务。
内容的提问来源于stack exchange,提问作者Andrea Zanetti
相关产品推荐
相关产品推荐

