我在Web应用程序中使用OWIN + Microsoft.AspNet.Identity.Owin (v.2.0.0.0)。我按照广泛推荐的方式为每个web请求注册UserManager/DbContext:
app.CreatePerOwinContext(ApplicationDbContext.Create);
app.CreatePerOwinContext<ApplicationUserManager>(ApplicationUserManager.Create);
但这两个都没有处理过。我看了一眼reflector,它似乎是扩展方法中的一个bug:
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有两个回调- create和dispose,但dispose回调没有在这里注册。我也用内存分析器确认了我的怀疑。
我在codeplex/github上没有看到Owin (实际上我以为它是开源的),所以我不知道在哪里问我的问题:其他人能确认这是内存泄漏吗?我不太确定,因为谷歌对此只字不提,如果这是一个bug,我希望它应该在任何地方都被讨论。
https://stackoverflow.com/questions/24378856
复制相似问题