Я использую OWIN + Microsoft.AspNet.Identity.Owin(v.2.0.0.0) в веб-приложении. Я регистрирую UserManager/DbContext для каждого веб-запроса, как это рекомендуется:
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
но ни один из них не используется. Я взглянул на отражатель, и это похоже на ошибку в методе расширения:
public static IAppBuilder CreatePerOwinContext<T>(this IAppBuilder app, Func<IdentityFactoryOptions<T>, IOwinContext, T> createCallback) where T: class, IDisposable
{
if (app == null)
{
throw new ArgumentNullException("app");
}
if (createCallback == null)
{
throw new ArgumentNullException("createCallback");
}
object[] args = new object[1];
IdentityFactoryOptions<T> options = new IdentityFactoryOptions<T> {
DataProtectionProvider = app.GetDataProtectionProvider()
};
IdentityFactoryProvider<T> provider = new IdentityFactoryProvider<T> {
OnCreate = createCallback
};
options.Provider = provider;
args[0] = options;
app.Use(typeof(IdentityFactoryMiddleware<T, IdentityFactoryOptions<T>>), args);
return app;
}
IdentityFactoryProvider имеет два обратных вызова - создайте и удалите, но утилита обратного вызова здесь не зарегистрирована. Я также подтвердил свое подозрение в профайлерах памяти.
Я не вижу Owin на codeplex/github (на самом деле я думал, что это с открытым исходным кодом), поэтому я не знаю, где задать свой вопрос: может ли кто-нибудь еще подтвердить, что это утечка памяти? Я не уверен, потому что Google ничего не говорит об этом, я ожидаю, что он будет обсуждаться повсюду, если это ошибка.