2012-01-20 11 views
11

Zakładając, że mam następujący interfejs i klasa:interfejs Autofac i IDisposable

public interface IFooRepo : IDisposable { 

    //... 
} 

public FooRepo : IFooRepo { 

    //Methods here 

    //Properly implement the IDisposbale.Dispose() here 
} 

używam Autofac jako IoC kontenera w mojej aplikacji i jeśli mogę się zarejestrować to jak poniżej, mogę mieć pewność, że będzie on umieszczony prawidłowo ?

private static IContainer RegisterServices(ContainerBuilder builder) { 

    builder.RegisterType<FooService>().As<IFooService>(); 

    return 
     builder.Build(); 
} 

Czy powinienem podjąć dalsze kroki w zależności od typu aplikacji, z której korzystam. (W tym przypadku używam ASP.NET MVC, ale rozważam użycie autofac w projekcie WCF Web API i bibliotekę klasy)

Odpowiedz

11

Autofac wywołuje Dispose dla wszystkich wystąpień komponentów implementujących IDisposable po zakończeniu ich zakresu życia nadrzędnego. Nie musisz wykonywać żadnej dodatkowej pracy tutaj.

Aby zapoznać się z opcjami dostarczanymi przez Autofac do zarządzania zasięgiem życia, śledź łącza @ dotnetstep.

Zarządzanie zakresami życia jest strategią, która zależy od konkretnego zastosowania nie tylko typu (MVC lub zwykły ASP.NET lub cokolwiek innego). This article about lifetimes autorstwa twórcy Autofac daje głębokie wyjaśnienie tematu.

Jeśli chodzi o projekt MVC3, polecam śledzenie MVC3 integration guidelines. To sprawi, że wszystkie indywidualne żądania HTTP będą miały oddzielne zakresy życia utworzone dla nich. Po zakończeniu żądania HTTP Autofac zakończy związany z nim zakres czasu życia i usunie wszystkie zasoby do dyspozycji utworzone w tym zakresie.

Ten sam efekt można osiągnąć dla projektu ASP.NET WebForms, postępując zgodnie z corresponding guidelines