在扩展类的静态方法中使用扩展方法

Pro*_*ofK 0 .net asp.net

我有一个扩展方法如下:

public static class PageExtensions
{
    public static int GetUserId(this Page targetPage)
    {
        var user = Membership.GetUser(targetPage.User.Identity.Name);
        return (int)user.ProviderUserKey;
    }   
}
Run Code Online (Sandbox Code Playgroud)

现在在页面中,我需要在静态 WebMethod 中使用此方法,因此我向 PageExtensions 添加了另一个“扩展方法”:

public static int GetUserId()
{
    return (int)Membership.GetUser(HttpContext.Current.User.Identity.Name).ProviderUserKey;
}
Run Code Online (Sandbox Code Playgroud)

我在我的 WebMethod 中这样称呼它:

PageExtensions.GetUserId()
Run Code Online (Sandbox Code Playgroud)

这是做事的好方法吗?还有其他方法吗?

Jon*_*eet 5

不,您还没有创建另一个扩展方法——您已经创建了一个普通的静态方法。

个人会将它们分成“扩展”以外的一个类——这显然不是一个扩展方法。静态类具有扩展方法和非扩展方法(就像Enumerable那样)并不算太糟糕,但Extensions在这种情况下你不应该调用它。

当然,您可以将其更改为真正的扩展方法HttpContext

public static int GetUserId(this HttpContext context)
{
    return (int)Membership.GetUser(context.User.Identity.Name).ProviderUserKey;
}
Run Code Online (Sandbox Code Playgroud)

然后将其称为:

int userId = HttpContext.Current.GetUserId();
Run Code Online (Sandbox Code Playgroud)