2012-01-20 68 views
11

假設我有以下的接口和類:Autofac和IDisposable接口

public interface IFooRepo : IDisposable { 

    //... 
} 

public FooRepo : IFooRepo { 

    //Methods here 

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

我使用Autofac作爲IoC容器在我的應用程序,如果我註冊這個下面,我可以肯定,它會妥善處理?

private static IContainer RegisterServices(ContainerBuilder builder) { 

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

    return 
     builder.Build(); 
} 

或者我應該採取進一步的步驟,具體取決於我正在使用的應用程序類型。 (在這種情況下,我使用ASP.NET MVC,但我正在考慮在WCF Web API項目和類庫中使用autofac)

回答

11

對於實施IDisposable的組件的所有實例,一旦它們的父生存期範圍結束,Autofac就會調用Dispose。你不需要在這裏做任何額外的工作。

要熟悉Autofac提供的用於管理生命期範圍的選項,請遵循@ dotnetstep的鏈接。

管理生命週期範圍是一種策略,它取決於您的特定應用程序,而不僅僅是它的類型(MVC或純ASP.NET或其他)。由Autofac的創建者This article about lifetimes給出了該主題的深入解釋。

至於MVC3項目,我建議你按照MVC3 integration guidelines。這將使所有單獨的HTTP請求爲它們創建單獨的生存期範圍。一旦HTTP請求完成,Autofac將完成關聯的生存期範圍並處理在該範圍內創建的所有可用資源。

通過遵循corresponding guidelines

可以實現ASP.NET WebForms項目的相同效果