2010-08-16 241 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