La semplice documentazione dell'iniettore fornisce ottimi esempi su come configurare il contenitore per WebRequest, Web API, WCF, ... ma gli esempi sono specifici per una tecnologia/stile di vita alla volta. La nostra applicazione web usa la maggior parte di loro insieme! Non mi è chiaro come configurare il contenitore per lavorare con diversi stili di vita.Come configurare un semplice contenitore di iniettori e lifestylse in un'app Web MVC con WebAPI, WCF, SignalR e attività in background
Diciamo che ho un progetto MVC con Web API. Ho i seguenti oggetti:
- MyDbContext: Il mio codice entità primo contesto db
- IMyDataProvider attuato da MyDataProvider: Contiene logica di query e usa MyDbContext
- MyController: Controller MVC che utilizza IMyDataProvider
- MyApiController: WebAPI controller che utilizza IMyDataProvider
Devo creare e configurare un contenitore per ogni tipo di stile di vita?
Quando registro tutto con RegisterPerWebRequest<T>
funziona con entrambi i tipi di controller. È sicuro? O avrò problemi quando utilizzo async/await in un controller API Web?
Qual è la migliore configurazione quando ho entrambi i controller MVC e Web API che vengono iniettati le stesse istanze?
Devo utilizzare uno stile di vita ibrido?
Ora per complicare le cose ... la nostra applicazione utilizza anche attività in background e SignalR.
Entrambe si verificano talvolta al di fuori di una richiesta Web e richiedono l'accesso agli stessi oggetti descritti in precedenza.
La soluzione migliore sarebbe utilizzare un ambito Lifetime?
Devo creare un nuovo contenitore per questo stile di vita? o posso riutilizzare/riconfigurare il mio contenitore MVC/Web API?
C'è un triplo stile di vita?
Sapevo che MVC e WebAPI non erano la stessa cosa, ma devo dire che sono sorpreso di sentire che è un cattivo progetto mescolare entrambi nello stesso progetto. Considerando che saranno uniti in MVC6, sono in grado di vivere con questa architettura. L'uso di uno stile di vita ibrido sembra essere il modo più semplice per utilizzare Simplje Injector con MVC, WebAPI e SignalR/BgTasks. Tuttavia avevo bisogno di cambiare _lifestyleSelector_ come segue: 'container.GetCurrentLifetimeScope() == null && HttpContext.Current! = Null' per utilizzare esplicitamente l'ambito quando esiste anche se HttpContext potrebbe esistere (all'interno della richiesta SignalR) – Chris