2011-12-16 84 views
0

我知道在你註冊一個組件時有OnRelease方法,ILifetimeScope上也有CurrentScopeEnding事件,但是在你不再允許使用有問題的生命週期作用域來解析任何東西時,這兩個擴展點中的代碼都會執行得非常奇怪。如果你嘗試,你會得到ObjectDisposedException。但我需要!我能做什麼?如何在生命週期終止之前運行邏輯autofac?

回答

0

當您處理當前生命週期範圍時,解決範圍內的任何問題都有點奇怪。你爲什麼需要它?嘗試從根作用域解析「你需要的東西」。

+0

這正是我所做的。這只是我需要保存對數據庫的更改的「事情」。只有在當前請求結束時纔會發生 - 即當前生命週期範圍正在處理。 – 2011-12-19 09:22:34

0

我知道這個線程是海拉老,但它仍然是開放的,所以我認爲它是免費的遊戲。另外我只是自己解決了這個問題,所以我想我會回答它,因爲它在我的谷歌搜索結果中很高。可以幫助別人。

這裏就是我所做的記錄ILifetimeScope實例的壽命:

 

class LifetimeLogger : IStartable 
{ 
    readonly ILifetimeScope _lifetimeScope; 

    public LifetimeLogger(ILifetimeScope lifetimeScope) 
    { 
     _lifetimeScope = lifetimeScope; 
     //_lifetimeScope = scope; 
    } 

    public void Start() 
    { 
     initLifetimeScope(_lifetimeScope); 
    } 

    static void initLifetimeScope(ILifetimeScope lifetimeScope) 
    { 
     //lifetimeScope. 
     lifetimeScope.ChildLifetimeScopeBeginning += (sender, args) => 
     { 
      log("Begging lifetime scope (tag {0})", args.LifetimeScope.Tag); 
      initLifetimeScope(args.LifetimeScope); 
     }; 

     lifetimeScope.CurrentScopeEnding += (sender, args) => log("Ending lifetime scope ({0})", args.LifetimeScope.Tag); 
    } 
} 

您可以使用像,你會得到在每一個孩子一生範圍的開始和結束時執行的邏輯。

相關問題