private async ValueTask ValidateCanonicalNameAsync(TenantManager <TTenant> manager, TTenant tenant, ICollection <TenancyError> errors) { var canonicalName = await manager.GetCanonicalNameAsync(tenant); if (string.IsNullOrWhiteSpace(canonicalName)) { errors.Add(Describer.InvalidCanonicalName(canonicalName)); } else if (!string.IsNullOrEmpty(manager.Options.Tenant.AllowedCanonicalNameCharacters) && canonicalName.Any(c => !manager.Options.Tenant.AllowedCanonicalNameCharacters.Contains(c))) { errors.Add(Describer.InvalidCanonicalName(canonicalName)); } else { var owner = await manager.FindByCanonicalNameAsync(canonicalName); if (owner != null && !string.Equals(await manager.GetTenantIdAsync(owner), await manager.GetTenantIdAsync(tenant))) { errors.Add(Describer.DuplicateCanonicalName(canonicalName)); } } }