Dot-Net

Autofac 和 IDisposable 介面

  • September 14, 2017

假設我有以下介面和類:

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)

Autofac 呼叫Dispose組件的所有實例,IDisposable一旦它們的父生命週期結束就實現。您不需要在這裡做任何額外的工作。

要熟悉 Autofac 提供的用於管理生命週期範圍的選項,請點擊 @dotnetstep 的連結。

管理生命週期範圍是一種策略,它取決於您的特定應用程序,而不僅僅是它的類型(MVC 或普通 ASP.NET 或其他)。Autofac 的創建者關於生命週期的這篇文章對該主題進行了深入的解釋。

至於 MVC3 項目,我建議您遵循MVC3 集成指南。這將使所有單獨的 HTTP 請求都具有為它們創建的單獨的生命週期範圍。一旦 HTTP 請求完成,Autofac 將完成相關的生命週期範圍並處理在該範圍內創建的所有一次性資源。

通過遵循相應的指南,對於 ASP.NET WebForms 項目也可以實現相同的效果

引用自:https://stackoverflow.com/questions/8944369