2010-08-16 240 views
0

我有一个扩展方法如下:使用扩展方法的扩展类

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() 

这是一个感伤做事的方式?还有其他方法吗?

+0

我唯一的评论是,第二种方法是不是扩展方法,因此您对两种不同的(尽管相关的)方法使用相同的名称。 – 2010-08-16 19:28:14

回答

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(); 
+0

是的,这就是我引用'扩展方法'的原因。我喜欢你没有命名类扩展和HttpContect扩展的想法。我不知道该先试一试,嘿嘿。 – ProfK 2010-08-16 20:27:19