public void OnApplicationStarted() { var initializers = databaseInitializerDiscovery.DiscoverDatabaseInitializers(); var sortedInitializers = initializers.ToList(); sortedInitializers.Sort(comparer); foreach (var initializer in sortedInitializers) { Task.Factory.StartNewWithContext(async() => { using (IUnitOfWork uow = unitOfWorkFactoryFunc().CreateUnitOfWork()) { var commandContextStack = commandContextStackFunc(); commandContextStack.Push(new CommandContext(null, uow)); try { uow.Begin(); await initializer.InitializeAsync(repositoryFunc()); await uow.CommitAsync(); } finally { commandContextStack.Pop(); } } }).GetAwaiter().GetResult(); } }
public DatabaseInitializerLoaderTests() { initializers = new List <IDatabaseInitializer>() { Substitute.For <IDatabaseInitializer>(), Substitute.For <IDatabaseInitializer>() }; databaseInitializerDiscovery = Substitute.For <IDatabaseInitializerDiscovery>(); databaseInitializerDiscovery.DiscoverDatabaseInitializers().Returns(initializers); unitOfWork = Substitute.For <IUnitOfWork>(); unitOfWorkFactory = Substitute.For <IUnitOfWorkFactory>(); unitOfWorkFactory.CreateUnitOfWork().Returns(unitOfWork); repository = Substitute.For <IRepository>(); commandContextStack = new CommandContextStack(); sut = new DatabaseInitializerLoader(databaseInitializerDiscovery, new DatabaseInitializerDependencyComparer(), () => repository, () => unitOfWorkFactory, () => commandContextStack); }