2017-06-16 52 views
0

我使用統一注入和這樣的:Unity將PerRequestLifetimeManager注入後臺任務?

container.RegisterType<IDbContextFactory, DbContextFactory>(new PerRequestLifetimeManager()); 

container.RegisterType<IRepository<Log>, Repository<Log>>(); 
//....other repositories here... 

container.RegisterType<ILogService, LogService>(); 
//...other services here... 

,我有一個任務類,如:

public class MyTaskClass 
{ 

    LogService logService; 

    public MyTaskClass(LogService logService) 
    { 
     this.logService = logService; 
    } 

    async void ExecuteTasks() 
    { 
     Task t1 = Task.Factory.StartNew(() => 
     { 
     logService.Write("Test"); 
     }); 

     Task t2 = Task.Factory.StartNew(() => 
     { 
      logService.Write("Test"); 
     }); 

    await Task.WhenAll(t1, t2); 
    } 
} 

,並使用container.Resolve方法來創建MyTaskClass實例,但是它會發生由於PerRequestLifetimeManager,兩個任務使用由DbContextFactory生成的相同dbcontext的錯誤,如果我想通過統一創建不同的dbcontext實例,所以我必須註冊不同的IDbContextFactory的lifetimemanager?

感謝

+0

如果您的工廠總是返回相同的實例,那麼它不是工廠 –

回答

0

,如果你根本就沒有指定LifetimeManager,或使用TransientLifetimeManager,這是默認它的工作。每個解決方案將返回一個新的實例。在開始任務之前,您可以使用該方法和方法工廠的組合(在MyTaskClass類中注入了A Func<LogService>),因此每個任務都有不同的DbContext