概述
Autofac 是一款超赞的.NET IoC 容器 . 它管理类之间的依赖关系, 从而使 应用在规模及复杂性增长的情况下依然可以轻易地修改 . 它的实现方式是将常规的.net类当做 组件 处理。我们通常在一些情况下需要软件具有一个自动执行某些任务的功能,但是又不希望直接启动软件,或者每次都要手动的来启动软件,这时我们可可以考虑到windows服务了。
下面我们来看下在windows服务quartz任务下,如何使用注入信息autofac,以实现和web其他项目使用公共类库。
主要实现
1、Program下,Main启动执行Bootstrapper。
//AutofacAutofacConfig.Bootstrapper();
2、实现基类AutofacConfig.Container.BeginLifetimeScope()
public void Execute(IJobExecutionContext context){try{logger.Info($"{GetLoggerName()} Start DoJob");//設定 Settings (JobDataMap)Settings = context.JobDetail.JobDataMap;//建立 Autofac lifetime scopeusing (ILifetimeScope scope = AutofacConfig.Container.BeginLifetimeScope()){DoJob(context, scope, null);} }catch (Exception ex){logger.Error(ex, ex.Message);//發送錯誤訊息給 ITSendMailByAlert("Unhandle", ex.ToString());}finally{logger.Info($"{GetLoggerName()} Finish DoJob");}}
3、各自业务的实现DoJob(IJobExecutionContext context, ILifetimeScope scope, string[] args)
public class CampaignPermissionJob : BaseJob{public override void DoJob(IJobExecutionContext context, ILifetimeScope scope, string[] args){//Login Statusvar setLoginStatus = scope.Resolve<ISetLoginStatus>();var campaignPermissionService = scope.Resolve<ICampaignPermissionService>();var queueList = campaignPermissionService.GetQueueList();foreach (var queue in queueList){setLoginStatus.SetAccount(queue.Account);campaignPermissionService.Execute(queue);}}}