亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

ASP Net Core - 通用頁面模型

ASP Net Core - 通用頁面模型

C#
富國滬深 2023-04-29 18:12:27
我開始學習使用 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 類一樣為頁面模型使用通用參數?我認為這對于其他一些情況也可能非常有用。
查看完整描述

1 回答

?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

我想我找到了解決問題的方法。內部類似乎是由 PageModel 約定初始化的,可以在 IdentityPageModelConvention 源文件中找到:


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 通用屬性的內部類:


[IdentityDefaultUI(typeof(LoginModel<>))]

public abstract class LoginModel : PageModel


查看完整回答
反對 回復 2023-04-29
  • 1 回答
  • 0 關注
  • 158 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號