Autofac之生命週期和事件

Autofac爲註冊的類型對象提供了一套生命週期事件,覆蓋了一個類型從註冊到最後“釋放”的一套事件。有了這些事件,我們可以相對方便的在類型對象的各個階段進行AOP操作。

 builder.RegisterType<Worker>().As<IPerson>()
        .OnRegistered(e => Console.WriteLine("調用ContainerBuilder的Build方法時觸發OnRegistered事件!"))
        .OnPreparing(e => Console.WriteLine("在調用Resolve時觸發,具體觸發時機,是根據Resolve的類型獲取到類型相關配置時觸發的,而這時,類型對象還沒有實例化!"))
        .OnActivating(e => Console.WriteLine("在創建之前調用!"))
        .OnActivated(e => Console.WriteLine("創建之後調用!"))
        .OnRelease(e => Console.WriteLine("在釋放佔用的資源之前調用!"));
 using (var container = builder.Build())
 {
     var obj1 = container.Resolve<IPerson>();
     obj1.Say();
 }

 

OnRegistered(註冊之後觸發)

在類型註冊成功後觸發,也就是在調用ContainerBuilder的Build方法時,其方法內部觸發的。OnRegistered的委託參數類型爲ComponentRegisteredEventArgs,其中包含了類型註冊後的底層配置信息,此處不對配置信息做介紹,日常一般不會使用這寫參數。如果我們希望在類型註冊到autofac中後執行一些操作,我們可以通過OnRegistered事件達到目的

OnPreparing(註冊之後類型實例化之前)

在調用Resolve時觸發,具體觸發時機,是根據Resolve的類型獲取到類型相關配置時觸發的,而這時,類型對象還沒有實例化.在OnPreparing中,我們可以修改傳入的Parameter值,甚至可以以此修改實際調用的構造方法(通過Resolve對象構造方法選擇原則)

OnActivating(在具體實例使用)

 在註冊組件使用之前會被調用,此時可以替換實現類或者進行一些其他的初始化工作

OnActivated

在組件被完全創建的時候調用一次。在這個時候你可以執行程序級別的一些工作(這些工作依賴於對象被完全創建)

OnRelease

在組件釋放之後會被調用,替代組件的標準清理方法。實現了IDisposable 接口的標準清理方法(沒有標記爲ExternallyOwned) 通過調用Dispose 方法。沒有實現IDisposable或者被標記爲ExternallyOwned的清理方法是一個空函數-不執行任何操作。OnRelease 就是用來覆蓋默認的清理行爲的

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章