首页 新闻 会员 周边 捐助

QuartzNet反射依赖注入服务层问题

0
悬赏园豆:5 [已解决问题] 解决于 2020-08-07 17:33

各位大佬,我这里通过反射获取构造函数注入,单独注入Redis没问题

但是我加上我的服务层之后在注入就报错了那位帮忙看下

九两白菜粥的主页 九两白菜粥 | 初学一级 | 园豆:122
提问于:2019-12-05 17:23
< >
分享
最佳答案
0

看提示意思是 服务的 生命周期类型 不满足。你创建一个scoped类型的服务试试。

我之前也用过这玩意。我好像是放了一个后台一直运行的服务里了,有一种办法可以创建后台运行的服务。楼主先百度下找找。

收获园豆:5
会长 | 专家六级 |园豆:12463 | 2019-12-05 18:04

老师,我这边改成了scoped之后还是找不到,在容器里面没有我这个job的接口和服务层的接口,我是通过反射注入的job服务;方便帮忙解决一下吗?

九两白菜粥 | 园豆:122 (初学一级) | 2019-12-05 22:44

@王瘦子Kawhi: 我不是老师啊,太吓人了。

会长 | 园豆:12463 (专家六级) | 2019-12-06 10:40

@会长: 大佬 方便给解决一下吗?

九两白菜粥 | 园豆:122 (初学一级) | 2019-12-06 14:11

@王瘦子Kawhi:

放了HostedService里试试

会长 | 园豆:12463 (专家六级) | 2019-12-06 14:24

@会长: 方便看下你的HostedService 怎么实现的吗?

九两白菜粥 | 园豆:122 (初学一级) | 2019-12-06 17:21

@王瘦子Kawhi: 我的比较简单,没有注入

会长 | 园豆:12463 (专家六级) | 2019-12-06 19:09

@王瘦子Kawhi:

    public class VotingService : IHostedService
    {
        ILog _log = LogManager.GetLogger("domain", typeof(VotingService));

        /// <summary>
        /// 开始后台任务
        /// </summary>
        /// <param name="cancellationToken"></param>
        /// <returns></returns>
        public async Task StartAsync(CancellationToken cancellationToken)
        {
            try
            {
                var availableActivity = ActivitiyRepository.GetAvailableActivityId();
                if (availableActivity != null)
                {
                    VotingOperation.Init(availableActivity.Value.Item1, availableActivity.Value.Item2);

                    if (availableActivity.Value.Item2 == ActivityState.进行中.ToString())
                    {
                        VotingOperation.BeginScanVotingInfo();
                        await VotingStatisticsScheduler.StartScheduler(availableActivity.Value.Item1);
                    }
                }
            }
            catch (Exception ex)
            {
                _log.Fatal("启动后台任务失败", ex);
            }
        }
}
        /// <summary>
        /// 开始统计调度
        /// </summary>
        /// <param name="activityId"></param>
        /// <returns></returns>
        public async static Task StartScheduler(uint activityId)
        {
            if (Config.AutoCountVotesCount)
            {
                string cronSchedule4triggerPer1Hour = "0 0 0/1 * * ?"; // 1小时执行一次

                NameValueCollection props = new NameValueCollection { { "quartz.serializer.type", "binary" } };
                StdSchedulerFactory factory = new StdSchedulerFactory(props);

                _scheduler = await factory.GetScheduler();

                IJobDetail statisticsCreatingJob = JobBuilder.Create<StatisticsCreatingJob>()
        .WithIdentity("statisticsCreatingJob", "group1")
        .UsingJobData("activityId", activityId.ToString())
        .Build();

                var triggerPer1Hour = TriggerBuilder.Create()
                    .WithIdentity("triggerPer1Hour", "group1")
                    .WithCronSchedule(cronSchedule4triggerPer1Hour)
                    .ForJob("statisticsCreatingJob", "group1")
                    .Build();

                await _scheduler.ScheduleJob(statisticsCreatingJob, triggerPer1Hour);

                await _scheduler.Start();
            }
        }
会长 | 园豆:12463 (专家六级) | 2019-12-06 19:13
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册