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(); }
在類型註冊成功後觸發,也就是在調用ContainerBuilder的Build方法時,其方法內部觸發的。OnRegistered的委託參數類型爲ComponentRegisteredEventArgs,其中包含了類型註冊後的底層配置信息,此處不對配置信息作介紹,平常通常不會使用這寫參數。若是咱們但願在類型註冊到autofac中後執行一些操做,咱們能夠經過OnRegistered事件達到目的ui
OnPreparing(註冊以後類型實例化以前)spa
在調用Resolve時觸發,具體觸發時機,是根據Resolve的類型獲取到類型相關配置時觸發的,而這時,類型對象尚未實例化.在OnPreparing中,咱們能夠修改傳入的Parameter值,甚至能夠以此修改實際調用的構造方法(經過Resolve對象構造方法選擇原則)code
OnActivating(在具體實例使用)對象
在註冊組件使用以前會被調用,此時能夠替換實現類或者進行一些其餘的初始化工做blog
OnActivated接口
在組件被徹底建立的時候調用一次。在這個時候你能夠執行程序級別的一些工做(這些工做依賴於對象被徹底建立)生命週期
OnRelease事件
在組件釋放以後會被調用,替代組件的標準清理方法。實現了IDisposable 接口的標準清理方法(沒有標記爲ExternallyOwned) 經過調用Dispose 方法。沒有實現IDisposable或者被標記爲ExternallyOwned的清理方法是一個空函數-不執行任何操做。OnRelease 就是用來覆蓋默認的清理行爲的資源