2017-08-14 16 views
1

在Visual Studio 2017中創建新的ASP.NET Core項目後,我們得到2個控制器:AccountControllerManageController。兩個控制器都通過構造函數使用依賴注入來獲得ApplicationSignInManagerApplicationUserManager缺省項目依賴性處置不一致性

AccountControllerDispose

protected override void Dispose(bool disposing) 
{ 
    if (disposing) 
    { 
     if (_userManager != null) 
     { 
      _userManager.Dispose(); 
      _userManager = null; 
     } 

     if (_signInManager != null) 
     { 
      _signInManager.Dispose(); 
      _signInManager = null; 
     } 
    } 

    base.Dispose(disposing); 
} 

ManageControllerDispose

protected override void Dispose(bool disposing) 
{ 
    if (disposing && _userManager != null) 
    { 
     _userManager.Dispose(); 
     _userManager = null; 
    } 

    base.Dispose(disposing); 
} 

爲什麼在經理不ManageController處置標誌?爲什麼它不同於AccountController

+1

有趣的問題。我能夠複製。我的教育猜測是兩個不同的開發人員。更有趣的是,ApplicationSignInManager依賴於ApplicationUserManager,所以如果有的話,這會使其處於不一致的狀態(假設它是相同的對象)。無論哪種方式。我不喜歡這種處理方法,因爲我認爲對象的範圍/生命週期應該由掌握實例化知識的人來控制,在這種情況下,IoC容器(上面提到的相互依賴性就是其中的原因)。 – JuanR

回答

0

基於娟的評論:

它看起來像一個疏忽,但它並不重要,因爲IoC容器應釋放所有依賴所以它的精細,甚至完全消除的Dispose方法。