Две вещи могут помочь вам начать работу в правильном направлении.
Во-первых, builder.Register(...).InstancePerLifetimeScope()
предоставит вам область «для каждого запроса», а также «для каждого пользовательского срока службы».
Во-вторых, если вы запускаете вещи под таймером, создайте новую область действия вручную в точке входа метода таймера, где бы это ни было:
void OnTimer()
{
using (var timerScope = ApplicationContainer.BeginLifetimeScope())
{
var someComponent = timerScope.Resolve(...);
someComponent.DoWork();
}
}
Здесь ApplicationContainer
- это тот, который вы создали в Global.asax при запуске веб-запроса - вам нужно найти способ справиться с ним, когда отметится таймер.