Azure WebJob 并从 Microsoft.Extensions.DependencyInjection 连接 IServiceCollecton

Azure WebJob and wiring up IServiceCollecton from Microsoft.Extensions.DependencyInjection

我正在尝试弄清楚如何使用来自 Microsoft.Extensions.DependencyInjection

ServiceCollection 在 Azure WebJob 中进行依赖注入

例如:

services.AddTransient<IAdminUserLogsService, AdminUserLogsService>();

我不太明白如何将这个服务集合连接到 WebJobs JobHostConfiguration.JobActivator 可以理解的东西中

我的目的是根据默认的 AspNet 核心 Startup.cs 方式重新使用我用此方法设置的默认服务连接。

昨晚找了一圈还是没找到。

但经过一番摆弄后,我设法让一些东西与以下东西一起工作:

编辑:我用 Entity Framework 添加了一个更完整的解决方案。 我应该注意到我的 ASP.Net Core webapp 是基于 4.6.2 而不是纯核心构建的。

using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Azure.WebJobs.ServiceBus;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.EntityFrameworkCore;

namespace Settlements.WebJob
{
 public class ServiceJobActivator : IJobActivator
 {
  IServiceProvider _serviceProvider;

  public ServiceJobActivator(IServiceCollection serviceCollection) : base()
  {
    _serviceProvider = serviceCollection.BuildServiceProvider();
  }

  public T CreateInstance<T>()
  {
    return _serviceProvider.GetRequiredService<T>();
  }
 }   


class Program
{        
 static void Main()
 {  
   var config = new JobHostConfiguration();

   var dbConnectionString = Properties.Settings.Default.DefaultConnection;

   var serviceCollection = new ServiceCollection();

   // wire up your services    
   serviceCollection.AddTransient<IThing, Thing>(); 

   // important! wire up your actual jobs, too
   serviceCollection.AddTransient<ServiceBusJobListener>();

   // added example to connect EF
   serviceCollection.AddDbContext<DbContext>(options =>
      options.UseSqlServer(dbConnectionString ));


   // add it to a JobHostConfiguration
   config.JobActivator = new ServiceJobActivator(serviceCollection);

   var host = new JobHost(config);

   host.RunAndBlock();
   }
 }

}