Ho un'applicazione Web in cui sono registrati molti componenti utilizzando .LifestylePerWebRequest()
, ora ho deciso di implementare Quartz.NET, una libreria di pianificazione lavoro .NET, che viene eseguita in thread separati e non nel thread di richiesta.Castello. Stile di vita dei viandanti a seconda del contesto?
Come tale, HttpContext.Current
produce null
. I miei servizi, i repository e IDbConnection
sono stati istanziati finora utilizzando .LifestylePerWebRequest()
perché ha reso più facile eliminarli al termine delle richieste.
Ora voglio utilizzare questi componenti in entrambi gli scenari, durante le richieste web desidero che rimangano inalterati, e nei contesti non di richiesta voglio che usino un diverso stile di vita, immagino di poter gestire lo smaltimento di me stesso, ma come dovrei farlo per scegliere uno stile di vita per i componenti in base al contesto attuale?
Attualmente mi registrare i servizi (per esempio), in questo modo:
container.Register(
AllTypes
.FromAssemblyContaining<EmailService>()
.Where(t => t.Name.EndsWith("Service"))
.WithService.Select(IoC.SelectByInterfaceConvention)
.LifestylePerWebRequest()
);
immagino dovrei usare un qualche tipo di metodo di estensione, ma io proprio non lo vedo ..
Esiste una domanda relativa sull'esecuzione del codice sullo sfondo di un'app ASP.NET. La domanda riguarda il contenitore DI Simple Injector, ma la risposta potrebbe comunque essere interessante per te: http://stackoverflow.com/a/11059491/264697. – Steven