Zastanawiam się, jak zarządzać obiektem przy użyciu DI. Załóżmy, że mam klasęZarządzanie klasami jednorazowymi Injection Injection
class Foo : IFoo, IDisposable
{
// ...
}
Potem ta klasa jest wstrzykiwany do innej klasy
class Bar
{
public Bar(IFoo foo)
{
this.Foo = foo
}
IFoo Foo { get; set; }
}
Następnie wiążę to w pewnym zakresie (mój przykład używa MVC i Ninject)
this.Bind<IFoo>().To<Foo>().InRequestScope();
I zastanawiam się, skoro struktura Dependency Injection obsługuje cykl życia Foo
, czy powinienem wdrożyć IDispoable w Bar
? Uważam, że DI zarządza cyklem życia Foo
, więc nie należy go dotykać, jeśli inna klasa używa Foo
. Ponadto, ponieważ jednorazowy obiekt zostanie przekazany do Bar
jako parametr konstruktora, Bar
nie okład jednorazowy obiekt, więc nie wiem, jak rozmówca z Bar
chce wykorzystać Foo
po Bar
jest śmieci zebrane. Czy to jest poprawne?
Nicholas Blumhardt ma wielki post na ten temat, używając Autofact jako przykład, ale dotyczy w ogóle http://nblumhardt.com/2011/01/an-autofac-lifetime-primer/ – fsimonazzi
Patrząc na niektórych artykułów MSDN, to wygląda na to, że Microsoft wykona obie: http://msdn.microsoft.com/en-us/library/yhfzs7at%28v=vs.110%29 (StremReader) "Obiekt StreamReader wywołuje Dispose() na dostarczonym obiekcie Stream, gdy StreamReader .Dispose jest nazywane " , ale http://msdn.microsoft.com/en-us/library/z7ha67kw%28v=vs.110%29 (Bitmapa)" Musisz zachować strumień otwarty przez cały czas trwania Bitmapy. " – Michael