首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ASP Net核心-通用页面模型

ASP Net核心-通用页面模型
EN

Stack Overflow用户
提问于 2019-06-22 09:07:20
回答 1查看 937关注 0票数 0

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

代码语言:javascript
复制
[AllowAnonymous]
[IdentityDefaultUI(typeof(LoginModel<>))]
public abstract class LoginModel : PageModel

代码语言:javascript
复制
internal class LoginModel<TUser> : LoginModel where TUser : class

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

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

代码语言:javascript
复制
@page
@model LoginModel
@{
ViewData["Title"] = "Log in";
}

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-23 04:20:06

我想我找到了我的问题的解决方案。内部类似乎是由可以在IdentityPageModelConvention源文件中找到的PageModel约定初始化的:

代码语言:javascript
复制
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();
    }

此方法似乎通过抽象LoginModel类中定义的IdentityDefaultUI属性来确定具有TUser泛型属性的内部类:

代码语言:javascript
复制
[IdentityDefaultUI(typeof(LoginModel<>))]
public abstract class LoginModel : PageModel
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56711839

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档