2015-05-28 86 views
1

身份要求我使用它來創建一個數據庫方面:app.CreatePerOwinContext和共享數據庫方面

app.CreatePerOwinContext(EFDbContext.Create); 

所以我需要得到微軟統一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,它讀起來就像那種我需要的東西...仍然不確定我是否會遇到任何問題?

回答

1

你應該沒問題 - 當你做一個Resolve或ResolveAll來從容器中取回對象,並且當你使用PerThreadLifeTimeManager的時候,那麼Unity將爲該線程返回相同的實例。所以除非你正在做多線程的應用程序,那麼你應該沒問題。

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

+0

啊,剛剛發現奇怪的錯誤發生,並意識到這是因爲身份的東西使用大量的異步調用。這會干擾你所說的話題嗎? – Jimmyt1988

+0

HierarchicalLifetimeManager似乎正在工作......對此有任何負面影響? – Jimmyt1988