Не зная слишком много о Quartz.Net и IJob
s, я рискну высказать еще одно предложение.
Рассмотрим следующую оболочку задания:
public class JobWrapper<T>: IJob where T:IJob
{
private Func<Owned<T>> _jobFactory;
public JobWrapper(Func<Owned<T>> jobFactory)
{
_jobFactory = jobFactory;
}
void IJob.Execute()
{
using (var ownedJob = _jobFactory())
{
var theJob = ownedJob.Value;
theJob.Execute();
}
}
}
При следующих регистрациях:
builder.RegisterGeneric(typeof(JobWrapper<>));
builder.RegisterType<SomeJob>();
Фабрика заданий теперь может разрешить эту оболочку:
var job = _container.Resolve<JobWrapper<SomeJob>>();
Примечание: a область действия будет создана как часть экземпляра ownedJob
, который в данном случае имеет тип Owned<SomeJob>
.Любые зависимости, требуемые SomeJob
, то есть InstancePerLifetimeScope
или InstancePerDependency
, будут созданы и уничтожены вместе с экземпляром Owned
.