Azure WebJob and wiring up IServiceCollecton from Microsoft.



我正在尝试弄清楚如何使用Microsoft.Extensions.DependencyInjection中的ServiceCollection在 Azure Web Job 中进行依赖项注入

例如:

services.AddTransient<IAdminUserLogsService, AdminUserLogsService>();

我不太清楚如何将此服务集合连接到WebJobs JobHostConfiguration.JobActivator可以理解的内容中

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

昨晚四处搜索后仍然找不到太多东西。

但是经过一番摆弄,我设法得到了以下工作:

编辑:我使用实体框架添加了一个更完整的解决方案。我应该注意,我的 ASP.Net 核心网络应用程序是基于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();
   }
 }

}

相关内容

  • 没有找到相关文章

最新更新