默認MVC 5 +身份2.1項目包含這條線(在Startup.Auth.cs):爲什麼OK不要丟棄一個UserStore
app.CreatePerOwinContext<ApplicationUserManager>ApplicationUserManager.Create);
...其中定義靜態Create
方法(在IdentityConfig.cs)如下:
public static ApplicationUserManager Create(IdentityFactoryOptions<ApplicationUserManager> options, IOwinContext context)
{
var manager = new ApplicationUserManager(new UserStore<ApplicationUser>(context.Get<ApplicationDbContext>()));
...
}
注意如何在新UserStore<ApplicationUser>
創建那裏,並傳遞給ApplicationUserManager
構造。另請注意,UserStore<T>
是一次性的(基類實現IDisposable
)。
這讓我覺得很奇怪,因爲我想知道是誰負責處理新創建的UserStore
。我預計ApplicationUserManager
(或它的基類)必須在處置它時處置它。但是,不:我看着源頭,似乎不是。所以沒有人處置該實例!
這是爲什麼?你什麼時候不是想要處理一個實現IDisposable
的類的實例?
你看過那篇文章的評論嗎?他們概述了在上下文中調用Dispose的一些非常好的理由,即使它不是絕對必要的。 –
我並不認爲ApplicationUserManager應該負責處理上下文 - 這不是我想看到的行爲。但是,框架中有類似這樣的類。 –
當然放置一次性物體是一個好主意。我試圖說,在這種情況下,處理'DbContext'不是必需的,你可以忽略它。就像他們在這個例子中所做的一樣。順便說一下,如果你真的想把'UserStore'簡單地放在'Owin'上下文中並在Create方法中檢索它。 Owin的上下文管理器會處理它。 –