Mi chiedo come gestire un oggetto utilizzando DI. Supponiamo che io sono una classeGestione classi usa e getta Dipendenza iniezione
class Foo : IFoo, IDisposable
{
// ...
}
Poi questa classe viene iniettato in un'altra classe
class Bar
{
public Bar(IFoo foo)
{
this.Foo = foo
}
IFoo Foo { get; set; }
}
Poi mi legano questo in un certo ambito (il mio esempio utilizza MVC e Ninject)
this.Bind<IFoo>().To<Foo>().InRequestScope();
I Mi chiedo, dal momento che il framework Dipendenza Injection gestisce il ciclo di vita di Foo
, dovrei implementare IDispoable in Bar
? Il mio pensiero è che DI stia gestendo il ciclo di vita di Foo
, quindi non toccarlo, nel caso in cui un'altra classe stia usando Foo
. Inoltre, dal momento che l'oggetto usa e getta viene passato in Bar
come parametro del costruttore, Bar
non involucro un oggetto usa e getta, in modo che non si sa come il chiamante di Bar
vuole usare Foo
dopo Bar
è garbage collection. È giusto?
Nicholas Blumhardt ha un ottimo post su questo argomento, utilizzando come esempio Automatico, ma applicabile in generale http://nblumhardt.com/2011/01/an-autofac-lifetime-primer/ – fsimonazzi
Guardando alcuni articoli MSDN, Microsoft farà entrambe le cose: http://msdn.microsoft.com/en-us/library/yhfzs7at%28v=vs.110%29 (StremReader) "L'oggetto StreamReader chiama Dispose() sull'oggetto Stream fornito quando StreamReader .Dispose si chiama " ma http://msdn.microsoft.com/en-us/library/z7ha67kw%28v=vs.110%29 (Bitmap)" È necessario mantenere il flusso aperto per tutta la durata della Bitmap. " – Michael