我正在使用Quartz .net v2.3.3.0和Castle Windsor v3.3.0.0。
我的工作取决于服务
public class DemoJob : IJob
{
private readonly IService _Service;
public DemoJob(IService Service)
{
_Service = Service;
}
public void Execute(IJobExecutionContext context)
{
_Service.CallRepoMethod();
}
}
这是位于不同项目中的服务类
public class Service: IService
{
public void CallRepoMethod()
{
Repo();
}
}
到目前为止一切正常。
但是,只要我在服务类中注入依赖项,就不会执行该作业。
public class Service: IService
{
private readonly IRepository _repository;
Service(IRepository repository)
{
_repository = repository;
}
public void CallRepoMethod()
{
_repository.Repo();
}
}
IRepository由一个简单的Repository类实现,只有一个方法。 存储库类位于不同的项目中,IService,Service和IRepository位于同一个项目中。
我没有收到任何错误消息,但作业没有被执行。如果我从Service类中删除依赖项,那么一切正常并且作业就会执行。
以下是我如何注册依赖项
internal class CastleWindsorContainer : IContainer
{
public static WindsorContainer Container { get; private set; }
public CastleWindsorContainer()
{
Container = new WindsorContainer();
}
public void Register()
{
Container.Register(Component.For<IRepository>().ImplementedBy<Repository>().LifestyleTransient());
public Object Resolve(Type controllerType)
{
return Container.Resolve(controllerType);
}
public void Release(IController controller)
{
Container.Release(controller);
}
public void RegisterJobs(IJobFactory jobFactory)
{
Container.Register(Component.For<IJobFactory>().Instance(jobFactory).LifestyleTransient());
Container.Register(Component.For<IQuartzInitializer>().ImplementedBy<JobsConfig>().LifestyleTransient());
Container.Register(Component.For<IService>().ImplementedBy<Service>().LifestyleTransient());
Container.Register(Component.For<DemoJob>().ImplementedBy<DemoJob>().LifestyleTransient()
);
Container.Resolve<IQuartzInitializer>().RegisterJobs();
}
}
Global.asax中的代码
var container = new CastleWindsorContainer();
IJobFactory jobFactory = new WindsorJobFactory(container);
container.Register();
container.RegisterJobs(jobFactory);
我无法弄清楚出了什么问题。我搜索了解决方案,发现了许多链接,但它没有帮助,因为它们只显示了一个级别的依赖。如果依赖类依赖于另一个类会怎么样?
您可以在此处找到我的演示项目:DemoProject
我检查了一些链接
谢谢