我有一系列的類,我來處理,看上去像這樣WebJobs:WebJob依賴注入綁定到泛型類
public class EnvelopeSalutationJob : BatchJob
{
public EnvelopeSalutationJob(StringWriter swLogger)
: base(swLogger, "Envelope Salutation Job")
{
}
[ Singleton() ]
public async Task ProcessMessage(
[ QueueTrigger("%" + nameof(ContainerQueueConstants.EnvelopeSalutation) + "%") ] EnvelopeSalutationMessage msg,
TextWriter azureLogWriter
)
{
PhaseNames.SetNames("Processing Homes", "Job Completed");
await ExecuteFromMessage(msg, azureLogWriter, Launch);
}
}
這些使用AutoFac作爲DI框架偉大的工作,有一個看起來配置像這樣:
public static class ContainerConfig
{
public static IContainer GetContainer()
{
var builder = new ContainerBuilder();
// per job
builder.RegisterType<StringWriter>();
// jobs
builder.RegisterType<EnvelopeSalutationJob>();
return builder.Build();
}
}
但最近我想「泛化」的工作,所以,他們不依賴於特定的DbContexts。我試圖用這樣的模式:
public class EnvelopeSalutationJob<TContext, TUser>
: BatchJob<TContext, TUser>
where TContext : IdentityDbContext<TUser>, ICampaignContext, new()
where TUser : IdentityUser, INamedUser
{
public EnvelopeSalutationJob(StringWriter swLogger)
: base(swLogger, "Envelope Salutation Job")
{
}
[ Singleton() ]
public async Task ProcessMessage(
[ QueueTrigger("%" + nameof(ContainerQueueConstants.EnvelopeSalutation) + "%") ] EnvelopeSalutationMessage msg,
TextWriter azureLogWriter
)
{
PhaseNames.SetNames("Processing Homes", "Job Completed");
await ExecuteFromMessage(msg, azureLogWriter, Launch);
}
}
的AutoFac配置更改爲:
public static class ContainerConfig
{
public static IContainer GetContainer()
{
var builder = new ContainerBuilder();
// per job
builder.RegisterType<StringWriter>();
// jobs
builder.RegisterType<EnvelopeSalutationJob<ConnellJobContext, ConnellUser>>();
return builder.Build();
}
}
不幸的是,這是行不通的。 WebJobs控制檯應用程序啓動正常,但它抱怨:
找不到工作職能。嘗試使你的工作類和方法 公開。
是不是可以將作業綁定到泛型類的實例?