app.CreatePerOwinContext和共享数据库上下文

本文关键字:数据库 上下文 共享 CreatePerOwinContext app | 更新日期: 2023-09-27 17:51:03

Identity要求我使用这个来创建一个db上下文:

app.CreatePerOwinContext(EFDbContext.Create);

所以我需要得到Microsoft Unity的IOC正确。

我遇到的问题是,我意外地做了2个数据库上下文。一个用于应用程序中的其他内容,一个用于用户内容。我开始在错误的上下文中为用户编写函数,并使其抛出错误。

所以我决定为我的EFDbContext使用一个生命周期管理器:

// Database context
container.RegisterType<EFDbContext>(new PerThreadLifetimeManager());
// Microsoft identity stuff
container.RegisterType<ApplicationSignInManager>();
container.RegisterType<ApplicationUserManager>();
container.RegisterType<IAuthenticationManager>(
    new InjectionFactory(c => HttpContext.Current.GetOwinContext().Authentication));
container.RegisterType<IUserStore<ApplicationUser>, UserStore<ApplicationUser>>(
    new InjectionConstructor(typeof(EFDbContext)));

我想知道这是否会在未来造成问题?

编辑:

我发现异步的东西在身份可能已经导致这个设置的问题…

我现在已经使用了HierarchicalLifetimeManager,它读起来像我需要的那种东西…仍然不确定我是否会遇到任何问题?

app.CreatePerOwinContext和共享数据库上下文

你应该是好的-当你做一个Resolve或ResolveAll从容器中获取对象回来,当你设置使用PerThreadLifeTimeManager然后Unity将返回相同的实例为该线程。所以,除非你做的是多线程应用程序,否则你应该没问题。

裁判:https://msdn.microsoft.com/en-us/library/ff660872 (v = pandp.20) . aspx

我发现这篇文章似乎正是我所需要的:

http://www.wiktorzychla.com/2013/03/unity-and-http-per-request-lifetime.html

它有一个请求生命周期,而不是线程或容器…我注意到在使用分层时出现了一些奇怪的问题,而第二个似乎很有魅力!