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

时间:2010-08-16 19:23:47

标签: .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;
    }   
}

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

public static int GetUserId()
{
    return (int)Membership.GetUser(HttpContext.Current.User.Identity.Name).ProviderUserKey;
}

我在WebMethod中将其称为:

PageExtensions.GetUserId()

这是一种很好的做事方式吗?还有其他方法吗?

1 个答案:

答案 0 :(得分:3)

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

个人将这些内容分成“扩展”以外的类 - 它显然不是扩展方法。对于静态类来说,使用扩展方法和非扩展方法(例如Enumerable)并不是太糟糕,但在这种情况下你不应该将它称为Extensions

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

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

然后将其称为:

int userId = HttpContext.Current.GetUserId();