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();
}
}
}
我正在尝试弄清楚如何使用来自 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();
}
}
}