private async Task <IUser> GetUser() { IUser user; IEmailAddress emailAddress = null; using (ILifetimeScope scope = _container.BeginLifetimeScope()) { string subscriber = User.Claims.First(c => c.Type == ClaimTypes.NameIdentifier).Value; IUserFactory userFactory = scope.Resolve <IUserFactory>(); IEmailAddressFactory emailAddressFactory = scope.Resolve <IEmailAddressFactory>(); SettingsFactory settingsFactory = scope.Resolve <SettingsFactory>(); user = await userFactory.GetByReferenceId(settingsFactory.CreateAccount(_settings.Value), subscriber); if (user == null) { string email = User.Claims.First(c => c.Type == ClaimTypes.Email).Value; emailAddress = await emailAddressFactory.GetByAddress(settingsFactory.CreateAccount(_settings.Value), email); if (emailAddress == null) { emailAddress = emailAddressFactory.Create(email); IEmailAddressSaver emailAddressSaver = scope.Resolve <IEmailAddressSaver>(); await emailAddressSaver.Create(settingsFactory.CreateAccount(_settings.Value), emailAddress); } user = userFactory.Create(subscriber, emailAddress); user.Name = User.Claims.First(c => string.Equals(c.Type, "name", StringComparison.OrdinalIgnoreCase)).Value; SetSuperUser(user); IUserSaver userSaver = scope.Resolve <IUserSaver>(); await userSaver.Create(settingsFactory.CreateAccount(_settings.Value), user); } else { user.Name = User.Claims.First(c => string.Equals(c.Type, "name", StringComparison.OrdinalIgnoreCase)).Value; SetSuperUser(user); IUserSaver userSaver = scope.Resolve <IUserSaver>(); await userSaver.Update(settingsFactory.CreateAccount(_settings.Value), user); } } return(user); }