| File: IdentityPageModelConvention.cs | Web Access |
| Project: src\aspnetcore\src\Identity\UI\src\Microsoft.AspNetCore.Identity.UI.csproj (Microsoft.AspNetCore.Identity.UI) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Reflection; using Microsoft.AspNetCore.Mvc.ApplicationModels; namespace Microsoft.AspNetCore.Identity.UI; internal sealed class IdentityPageModelConvention<TUser> : IPageApplicationModelConvention where TUser : class { public void Apply(PageApplicationModel model) { var defaultUIAttribute = model.ModelType?.GetCustomAttribute<IdentityDefaultUIAttribute>(); if (defaultUIAttribute == null) { return; } ValidateTemplate(defaultUIAttribute.Template); var templateInstance = defaultUIAttribute.Template.MakeGenericType(typeof(TUser)); model.ModelType = templateInstance.GetTypeInfo(); } private static void ValidateTemplate(Type template) { if (template.IsAbstract || !template.IsGenericTypeDefinition) { throw new InvalidOperationException("Implementation type can't be abstract or non generic."); } var genericArguments = template.GetGenericArguments(); if (genericArguments.Length != 1) { throw new InvalidOperationException("Implementation type contains wrong generic arity."); } } }