所请求的服务 ' 尚未使用 autofac 在 Quartz.net 中注册
The requested service ' has not been registered in Quartz.net using autofac
我正在使用 autofac 注册 Quartz,但我 运行 遇到了一个问题,我得到了这个:
The requested service 'AuthMatcher.ConsumerSchechuler.ConsumerSchechulerJob' has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.
当在 jobFactory :IjobFactory 中调用 NewJob 方法时 class.
工厂类:
using Autofac;
using Microsoft.Extensions.DependencyInjection;
using Quartz;
using Quartz.Spi;
using System;
namespace AuthMatcher.ConsumerSchechuler
{
public class ConsumerJobFactory : IJobFactory
{
private IScheduler _scheduler;
private readonly IContainer _container;
public ConsumerJobFactory(IContainer container)
{
_container = container;
}
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
//test to see what happenes, it returns null
var service = _container.ResolveOptional<ConsumerSchechulerJob>();
// this is where the exception happens
return (IJob)_container.Resolve(bundle.JobDetail.JobType);
}
public void ReturnJob(IJob job) { }
}
}
Autofac 启动class:
namespace Workers
{
public class InstallerClass
{
private static readonly ILogger Logger = LogManager.GetCurrentClassLogger();
public static IContainer Startup()
{
var builder = new ContainerBuilder();
builder.RegisterType<Application>().As<IApplication>();
builder.RegisterType<RabbitMQImpl>().As<IQueue>().SingleInstance();
builder.RegisterType<ConsumeSchechuler>().As<IConsumeSchechuler>();
builder.RegisterType<BotFactory>().As<IBotFactory>();
var instance = QuartzInstance.Instance;
builder.RegisterType<ConsumerSchechulerJob>().As<IJob>();
builder.RegisterInstance(QuartzInstance.Instance).As<IScheduler>();
return builder.Build();
}
}
}
main class 正在调用安装并实例化 JobFactory
我将从启动 class 获得的容器及其所有依赖项传递给 ConsumerJobFactory。
namespace Workers
{
class Program
{
static void Main(string[] args)
{
var container = InstallerClass.Startup();
using (var scope = container.BeginLifetimeScope())
{
var app = scope.Resolve<IApplication>();
var _scheduler = container.Resolve<IScheduler>();
_scheduler.JobFactory = new ConsumerJobFactory(container);
app.Run();
}
}
}
}
任何帮助都将不胜感激,因为在此问题上停留了太久
The requested service AuthMatcher.ConsumerSchechuler.ConsumerSchechulerJob
has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.
此错误消息表示 ConsumerSchechulerJob
尚未注册。如果您查看您的注册
builder.RegisterType<ConsumerSchechulerJob>().As<IJob>();
您将 ConsumerSchechulerJob
注册为 IJob
而不是 ConsumerSchechulerJob
,因此 Autofac 没有任何 ConsumerSchechulerJob
的注册。要解决此问题,您应该注册它。
builder.RegisterType<ConsumerSchechulerJob>()
.As<IJob>()
.As<ConsumerSchechulerJob>();
或
builder.RegisterType<ConsumerSchechulerJob>()
.As<IJob>()
.AsSelf();
我正在使用 autofac 注册 Quartz,但我 运行 遇到了一个问题,我得到了这个:
The requested service 'AuthMatcher.ConsumerSchechuler.ConsumerSchechulerJob' has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.
当在 jobFactory :IjobFactory 中调用 NewJob 方法时 class.
工厂类:
using Autofac;
using Microsoft.Extensions.DependencyInjection;
using Quartz;
using Quartz.Spi;
using System;
namespace AuthMatcher.ConsumerSchechuler
{
public class ConsumerJobFactory : IJobFactory
{
private IScheduler _scheduler;
private readonly IContainer _container;
public ConsumerJobFactory(IContainer container)
{
_container = container;
}
public IJob NewJob(TriggerFiredBundle bundle, IScheduler scheduler)
{
//test to see what happenes, it returns null
var service = _container.ResolveOptional<ConsumerSchechulerJob>();
// this is where the exception happens
return (IJob)_container.Resolve(bundle.JobDetail.JobType);
}
public void ReturnJob(IJob job) { }
}
}
Autofac 启动class:
namespace Workers
{
public class InstallerClass
{
private static readonly ILogger Logger = LogManager.GetCurrentClassLogger();
public static IContainer Startup()
{
var builder = new ContainerBuilder();
builder.RegisterType<Application>().As<IApplication>();
builder.RegisterType<RabbitMQImpl>().As<IQueue>().SingleInstance();
builder.RegisterType<ConsumeSchechuler>().As<IConsumeSchechuler>();
builder.RegisterType<BotFactory>().As<IBotFactory>();
var instance = QuartzInstance.Instance;
builder.RegisterType<ConsumerSchechulerJob>().As<IJob>();
builder.RegisterInstance(QuartzInstance.Instance).As<IScheduler>();
return builder.Build();
}
}
}
main class 正在调用安装并实例化 JobFactory 我将从启动 class 获得的容器及其所有依赖项传递给 ConsumerJobFactory。
namespace Workers
{
class Program
{
static void Main(string[] args)
{
var container = InstallerClass.Startup();
using (var scope = container.BeginLifetimeScope())
{
var app = scope.Resolve<IApplication>();
var _scheduler = container.Resolve<IScheduler>();
_scheduler.JobFactory = new ConsumerJobFactory(container);
app.Run();
}
}
}
}
任何帮助都将不胜感激,因为在此问题上停留了太久
The requested service
AuthMatcher.ConsumerSchechuler.ConsumerSchechulerJob
has not been registered. To avoid this exception, either register a component to provide the service, check for service registration using IsRegistered(), or use the ResolveOptional() method to resolve an optional dependency.
此错误消息表示 ConsumerSchechulerJob
尚未注册。如果您查看您的注册
builder.RegisterType<ConsumerSchechulerJob>().As<IJob>();
您将 ConsumerSchechulerJob
注册为 IJob
而不是 ConsumerSchechulerJob
,因此 Autofac 没有任何 ConsumerSchechulerJob
的注册。要解决此问题,您应该注册它。
builder.RegisterType<ConsumerSchechulerJob>()
.As<IJob>()
.As<ConsumerSchechulerJob>();
或
builder.RegisterType<ConsumerSchechulerJob>()
.As<IJob>()
.AsSelf();