也许我看错了,但我已经这样做了一个多小时。
FormsAuthentication
类以包含static
方法,以返回一个连接的值,该值与遍布各个根点的模式相同。当前代码(选项#2):
public partial class FormsAuthentication {
public static string FormsUserCookieName () {
return FormsAuthentication.FormsCookieName + '_' + HttpContext.Current.User.Identity.Name;
}
}
我唯一没做过的事情就是为FormsAuthentication
“扩展名”创建一个名称空间文件。
坦率地说,不确定编译器在常驻命名空间中的“精神”是否会以不同的方式执行。
对于最佳方法的任何建议将不胜感激。
基于讨论和审核,似乎最好的方法是为每个页面继承的Page类实现一个属性。
public class WebsitePage : Page {
....
public string FormsUserCookieName { get { return FormsAuthentication.FormsCookieName + '_' + User.Identity.Name; } }
....
}
答案 0 :(得分:1)
我想你想创建一个extension-method。
实际上那些并没有真正扩展类FormsAuthentication
,因为它们位于自己的类中,并且完全独立于扩展类。看看这个例子:
public static class MyExtensions
{
public static string FormsUserCookieName (this FormsAuthentication) {
return FormsAuthentication.FormsCookieName + '_' + HttpContext.Current.User.Identity.Name;
}
}
如果在FormsAuthentication
内定义了 ,那么现在可以使用它,如果你在MyExtensions
中定义了myInstanceOfFormsAuthentication.FormsUserCookieName();
。因此,你现在可以写这个:
MyExtensions
然而,该方法并不真正属于该类,它在MyExtensions.FormsUserCookieName(myInstanceOfFormsAuthentication);
- 类中定义,因此等效于以下内容:
FormsAuthentication
另一种方法就是在class FormsAuthenticationEx
{
public static string FormsUserCookieName() { ... }
}
附近设置一个包装类:
{{1}}
对于API的用户来说,这更加清晰,因为它显示了扩展程序的定义位置。
答案 1 :(得分:1)
扩展课程不起作用。类的所有部分必须标记为部分,并且必须在同一个程序集中定义。你永远不会实现后者,因为这个类被定义为:
public sealed class FormsAuthentication
它不是部分的,与大多数.NET Framework类一样,它是密封的。
您唯一的选择是创建扩展方法。