各位大佬,我这里通过反射获取构造函数注入,单独注入Redis没问题
但是我加上我的服务层之后在注入就报错了那位帮忙看下
看提示意思是 服务的 生命周期类型 不满足。你创建一个scoped类型的服务试试。
我之前也用过这玩意。我好像是放了一个后台一直运行的服务里了,有一种办法可以创建后台运行的服务。楼主先百度下找找。
老师,我这边改成了scoped之后还是找不到,在容器里面没有我这个job的接口和服务层的接口,我是通过反射注入的job服务;方便帮忙解决一下吗?
@王瘦子Kawhi: 我不是老师啊,太吓人了。
@会长: 大佬 方便给解决一下吗?
@王瘦子Kawhi:
放了HostedService里试试
@会长: 方便看下你的HostedService 怎么实现的吗?
@王瘦子Kawhi: 我的比较简单,没有注入
@王瘦子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();
}
}