【发布时间】:2021-12-08 14:56:42
【问题描述】:
我为调度作业创建了以下抽象:
public abstract class BaseJob
{
public string? JobId { get; set; }
}
public interface IJobData
{ }
public interface IJob<in TJobData> where TJobData : IJobData
{
Task ExecuteAsync(TJobData jobData);
}
我使用工厂创建工作:
public class JobCreator<TJob, TJobData>
where TJob : IJob<TJobData>, new()
where TJobData : IJobData
{
public async Task ExecuteAsync(TJobData jobData)
{
var job = new TJob();
await job.ExecuteAsync(jobData);
}
}
示例实现:
public record ForgotPasswordJobData() : IJobData;
public class ForgotPasswordJob: BaseJob, IJob<ForgotPasswordJobData>
{
private readonly IMailService _mailer;
public ForgotPasswordJob(IMailer mailer)
{
_mailer = mailer;
}
public Task ExecuteAsync(ForgotPasswordJobData jobData)
{
// Do something
// Send mail
}
}
这是一个作业的排队方式:
JobClient.Enqueue<JobCreator<ForgotPasswordJob, ForgotPasswordJobData>>(job => job.ExecuteAsync(jobData));
因为 ForgetPasswordJob 没有无参数构造函数,所以我得到一个 CS0310 错误,这就是说
“ForgotPasswordJob”类型必须是非抽象类型,具有公共 无参数构造函数,以便将其用作参数“参数” 在泛型类型或方法 'JobCreator
'
如何在 IJob 的实现中使用依赖项?
【问题讨论】:
-
你好像漏掉了一些标签
标签: c#