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
,它读起来像我需要的那种东西…仍然不确定我是否会遇到任何问题?
你应该是好的-当你做一个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它有一个请求生命周期,而不是线程或容器…我注意到在使用分层时出现了一些奇怪的问题,而第二个似乎很有魅力!