在我的SharePoint 2010 c#/ asp.net网站中,我有一个类定义为
的类namespace PDF_Library.VisualWebPart1
{
public partial class PDF_Library : Usercontrol
{
public static PDF_Library current;
protected void Page_Load(object sender, EventArgs e)
{
current = (PDF_Library)this;
}
}
}
public static class Page_State
{
public static Page is_display()
{
return PDF_Library.current.Page; // didn't work...
}
}
它没有构造函数。
如何获得the current instance of this class
的引用?
我在顶部尝试了类似的东西
public static PDF_Library current;
然后在一个函数中
current = (PDF_Library)this;
但这没效果......
答案 0 :(得分:3)
事实上,您在static
函数中使用了current
,this
无法正常工作。 static
是一种与该类的任何实例无关的方法,因此您无法使用this
。
您唯一的选择是将方法设为非静态方法,或者将类的实例作为参数传递给静态函数。
据我所知,你正试图创建一个“Singleton Pattern”。有关如何创建单例类的示例,请参阅上一篇MSDN文章的链接。
答案 1 :(得分:3)
您需要了解它不会以这种方式工作。您的问题标记为asp.net - 多用户,多线程环境,其中将始终创建多个PDF_Library
用户控件实例。绝对不确定哪一个会挂掉PDF_Library.current
。你需要重新考虑你的设计。
更多相关信息:Page
实例在请求处理完成时被处理掉。通常,此实例及其所有控件和诸如Response
,Request
,Context
等内容将设置为垃圾回收。因为您在静态字段中保留对UserControl
实例的引用,所有这些对象(包括Page
)将保留在内存中,直到将此current
引用替换为其他内容。
答案 2 :(得分:1)
看起来它会有一个实例。如果该类被标记为静态(它似乎不是),那么您可以通过名称“PDF_Library”引用它。另外,使用ILSpy或反射器来查看最终结果。我打赌它有一个构造函数;只是因为你没有看到一个,并不意味着它不存在。覆盖默认的ctor并在那里设置你的实例。
namespace PDF_Library.VisualWebPart1
{
public partial class PDF_Library : Usercontrol
{
public static PDF_Library Current;
public PDF_Library() : base() {
Current = this;
}
}
}
您的Page_Load代码可能遇到的问题是它在生命周期中被调用太晚,这就是您的引用调用无效的原因。