ASP Net Core - 通用页面模型

我开始学习使用 ASP Net Core 编程。在花一些时间使用 Asp Net Core Identity 时,我想实现一个自己的登录页面以用于学习目的。不幸的是,如果您想使用包含通用参数的页面模型,如 Asp Net Core Identity 的 Login.cshtml.cs,现在我有一些问题要了解依赖注入是如何工作的。在源代码中,有两个类派生自登录页面的页面模型:


[AllowAnonymous]

[IdentityDefaultUI(typeof(LoginModel<>))]

public abstract class LoginModel : PageModel


internal class LoginModel<TUser> : LoginModel where TUser : class

我读到 SignInManager 类处理 Identity 中的登录和注销过程。但是因此我想我必须使用内部类。但我不明白 Asp Net Core 标识符如何使用内部类而不是抽象类,或者它可能是这样?!


即使在剃须刀页面中,也只有抽象类用作模型:


@page

@model LoginModel

@{

ViewData["Title"] = "Log in";

}

有没有人可以向我解释我必须做什么才能像内部 LoginModel 类一样为页面模型使用通用参数?我认为这对于其他一些情况也可能非常有用。


富国沪深
浏览 129回答 1
1回答

绝地无双

我想我找到了解决问题的方法。内部类似乎是由 PageModel 约定初始化的,可以在 IdentityPageModelConvention 源文件中找到:public void Apply(PageApplicationModel model)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; var defaultUIAttribute = model.ModelType.GetCustomAttribute<IdentityDefaultUIAttribute>();&nbsp; &nbsp; &nbsp; &nbsp; if (defaultUIAttribute == null)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; ValidateTemplate(defaultUIAttribute.Template);&nbsp; &nbsp; &nbsp; &nbsp; var templateInstance = defaultUIAttribute.Template.MakeGenericType(typeof(TUser));&nbsp; &nbsp; &nbsp; &nbsp; model.ModelType = templateInstance.GetTypeInfo();&nbsp; &nbsp; }此方法似乎通过在抽象 LoginModel 类中定义的 IdentityDefaultUI 属性来确定具有 TUser 通用属性的内部类:[IdentityDefaultUI(typeof(LoginModel<>))]public abstract class LoginModel : PageModel
打开App,查看更多内容
随时随地看视频慕课网APP