windows服務autofac注入quartz任務


一、nuget下載相關類庫引用

  install-package Quartz

      install-package Autofac

  install-package Autofac.Configuration

      install-package Autofac.Extras.Quartz

 

二、配置autofac注入

public class AutofacUtil
    {
        /// <summary>
        /// Autofac容器對象
        /// </summary>
        private static IContainer _container;

        /// <summary>
        /// 初始化autofac
        /// </summary>
        public static void InitAutofac()
        {
            var builder = new ContainerBuilder();

            //配置接口依賴
            builder.RegisterInstance<IDbConnection>(DBFactory.CreateConnection()).As<IDbConnection>();
            builder.RegisterGeneric(typeof(GenericRepository<>)).As(typeof(IGenericRepository<>));

            //注入倉儲類
            builder.RegisterAssemblyTypes(Assembly.Load("Demo.Repository"))
                   .Where(x => x.Name.EndsWith("Repository"))
                   .AsImplementedInterfaces();

            //配置quartz.net依賴注入
            builder.RegisterModule(new QuartzAutofacFactoryModule());
            builder.RegisterModule(new QuartzAutofacJobsModule(Assembly.GetExecutingAssembly()));

            _container = builder.Build();
        }

        /// <summary>
        /// 從Autofac容器獲取對象
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static T GetFromFac<T>()
        {
            return _container.Resolve<T>();
        }
    }

 

三、windows服務注入autofac

    static class Program
    {
        /// <summary>
        /// 應用程序的主入口點。
        /// </summary>
        static void Main()
        {
            //windows服務初始化工作
            AutofacUtil.InitAutofac();

            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[] 
            { 
                new Service1() 
            };
            ServiceBase.Run(ServicesToRun);
        }
    }

 

四、quartz任務中注入服務

 /// <summary>
    /// 推送短信任務
    /// </summary>
    public class PushSMSJob : IJob
    {
        private readonly ISMSNoticeRepository _smsNoticeRepository;

        public PushSMSJob(ISMSNoticeRepository smsNoticeRepository)
        {
            _smsNoticeRepository = smsNoticeRepository;
        }

        /// <summary>
        /// 執行推送短信的具體實現代碼
        /// </summary>
        /// <param name="context"></param>
        public void Execute(IJobExecutionContext context)
        {
            //獲取待發送短信列表
            var waitSendList = _smsNoticeRepository.GetWaitForSendSMS();
        }
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM