я имел ряд классов, которые я использовал для обработки WebJobs, которые выглядели примерно так:WebJob Dependency Injection Связывание с Generic класса
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();
}
}
Но в последнее время я хотел «genericize» рабочие места, чтобы они не были привязаны к конкретным 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 запускается нормально, но оно жалуется:
Не найдено должностей. Попробуйте сделать свои классы и методы работы общественностью.
Невозможно ли привязать задания к экземплярам родовых классов?