public async Task InitialiseAsync()
{
if (this.initialised) return;
this.initialised = true;
this.uiContext.Controllers.OfType<IInitialisableController>().ToList().ForEach(i => i.Initialise());
IList<IPersistentApplicationStateObject> rehydratedModels = (await this.statePersistence.LoadAsync())?.ToList();
if (rehydratedModels == null || rehydratedModels.None())
{
rehydratedModels = CreateNewDefaultApplicationState();
}
// Create a distinct list of sequences.
IEnumerable<int> sequences = rehydratedModels.Select(persistentModel => persistentModel.LoadSequence).OrderBy(s => s).Distinct();
// Send state load messages in order.
foreach (int sequence in sequences)
{
int sequenceCopy = sequence;
IEnumerable<IPersistentApplicationStateObject> models = rehydratedModels.Where(persistentModel => persistentModel.LoadSequence == sequenceCopy);
MessengerInstance.Send(new ApplicationStateLoadedMessage(models));
}
MessengerInstance.Send(new ApplicationStateLoadFinishedMessage());
}