Sto rielaborando un codice esistente per fare un uso migliore del contenitore autofac. La situazione che sto vivendo è che un sacco di cose usate per risolvere i loro componenti direttamente dal contenitore in un classico anti-pattern ServiceLocator
. Sono in procinto di introdurre adeguati schemi di unità di lavoro utilizzando LifetimeScope
.Controllare se il componente è stato risolto nell'ultimo ciclo LifetimeScope
Il problema che sto affrontando è che qualche componente deve essere risolto da un bambino LifetimeScope
quanto stanno attuando IDisposable
e deve essere smaltito. Se sono risolti nell'ambito della radice che non accadrà mai.
Esiste un modo per impedire che alcuni componenti vengano risolti nell'ambito della radice? Crashing runtime è OK per questo, dal momento che sto esaminando questi casi uno per uno e introducendo gli ambiti necessari. L'unico modo che posso pensare di fare questo è creare un piccolo componente fittizio che viene risolto una volta per l'ambito di vita principale e risolto in .InstancePerLifetimeScope()
, memorizzandolo staticamente da qualche parte. Quindi, quando un componente successivo viene risolto, otterrò uno di quei componenti fittizi e vedrò se si tratta della stessa istanza di quella che va in ambito root. È un po 'goffo, e c'è un modo migliore?