簡體   English   中英

如何在靜態類中調用服務?

[英]How to call a service inside a static class?

我正在擴展類以獲取用戶電子郵件,但是我無法引用ApplicationDbContext服務。

public static class Extensions
{
    // private static readonly ApplicationDbContext _dbContext;

    // static Extensions(ApplicationDbContext dbContext)
    // {
    //     _dbContext = dbContext;
    // }

    public static string GetUserEmail(this ClaimsPrincipal principal)
    {
        string email = string.Empty;

        string userid = principal.FindFirst(ClaimTypes.NameIdentifier)?.Value ?? "";

        if (!string.IsNullOrEmpty(userid))
        {
            email = _dbContext.Users.Single(x => x.Id == userid).Email;
        }

        return email;
    }
}

用途:

string email = User.GetUserEmail();

但是靜態類不能包含任何參數。 另外,我不想將dbContext作為參數傳遞給GetUserEmail方法。

還有另一種方法嗎?

使用用戶管理器獲取該信息

// Inject UserManager<IdentityUser> into your controller or service
var user = await userManager.GetUserAsync(this.User); // pass ClaimsPrincipal
var email = await usermanager.GetEmailAsync(user);

可以使用靜態初始化方法嗎?

public class Extensions
{
    private static ApplicationDbContext _dbContext { get; set; }

    public static void Init(ApplicationDbContext dbContext)
    {
        this._dbContext = dbContext;
    }
}

用法

Extensions.Init(dbContext);
var email = User.GetEmail();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM