当我注入依赖时,Quartz .net不起作用

时间:2016-03-08 04:27:15

标签: asp.net-mvc inversion-of-control castle-windsor quartz.net

我正在使用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

我检查了一些链接

Quartz .net Windsor Facility

谢谢

0 个答案:

没有答案