asp.net-mvc - ASP.NET Web 应用程序中的工具栏:单例方法总是返回 null
问题描述
我在母版页中使用工具栏作为用户控件。
通过单例方法(见下文)初始化工具栏时,GetInstance()
总是返回空工具栏。
代码:
Toolbar uc = (BaseClass.GetInstance()).toolBar;
public class BaseClass
{
private static BaseClass instance;
public Toolbar toolBar;
public static BaseClass GetInstance()
{
if (instance == null)
{
instance = new BaseClass();
}
return instance;
}
}
为什么GetInstance()
总是返回一个空工具栏?
解决方案
您不会为工具栏公共字段实例化对象。从哪里提取代码或如何实例化都没有关系。如果在您调用它时没有实例化它(并且它是一个引用类型),您将返回 null。显然,由于某种原因,您没有做到这一点。
以下是调整后的代码以说明修复它的方法。但是如果你在外部将一个实例注入你的单例,那么你必须确保你的代码可以处理如果它返回 null..
public class BaseClass
{
private static BaseClass instance;
public Toolbar toolBar;
public static BaseClass GetInstance()
{
if (instance == null)
{
instance = new BaseClass();
instance.toolBar = new Toolbar(); // or however you instantiate toolbar.
}
return instance;
}
}
您提供的代码片段有很多事情困扰着我(例如,您的单例不是线程安全的并且您直接公开工具栏字段),但上面可能是您的代码不起作用的原因..
推荐阅读
- javascript - 粒子生成太快 - Phaser 3
- dns - dig NS 和 nslookup 提供过时的名称服务器;+trace 或 whois 是正确的
- pyspark - Pyspark,EOFError - 内存问题或损坏的数据?
- ios - iOS 推送通知横幅清除操作按钮
- javascript - 如何将深层嵌套对象文字转换为对象数组?
- swift - 表达式从“Int?”隐式强制转换?到任何,即使在明确定义之后
- python-2.7 - 如何使用 python 将 JSON 数据传递到 PostgresSql 数据库
- wso2 - WSO2 Identity Server:线程死亡导致的授权失败
- mysql - SQL - 很难构建一个“复杂”的请求
- sql - 使用 case 语句设置查询