我试图找出如何使用ServiceCollection
中的Microsoft.Extensions.DependencyInjection
E.g:
services.AddTransient<IAdminUserLogsService, AdminUserLogsService>();
我无法弄清楚如何将此服务集合连接到WebJobs JobHostConfiguration.JobActivator
可以理解的内容
我的目的是按照默认的AspNet核心Startup.cs
方式重新使用我使用此方法设置的默认服务接线。
答案 0 :(得分:5)
昨晚搜索后仍然找不到多少。
但经过一番摆弄后,我设法得到了以下内容:
编辑:我已经使用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();
}
}
}