好的,我得到了下面的类,但当GetIstance();
Visual Studio显示时,item总是为null:
Field 'PageStyle.item' is never assigned to, and will always have its default value null
我该如何解决这个问题?我究竟做错了什么?有没有更好的方法来做下面的事情?
public class PageStyle
{
private static PageStyle _Instance = null;
// Instantiate variables relating to sitecore item paths.
Database webDB;
Sitecore.Data.Items.Item item;
// constructor
private PageStyle()
{
if (webDB != null)
{
webDB = Sitecore.Configuration.Factory.GetDatabase("web");
Sitecore.Data.Items.Item item = webDB.Items[StartItem];
}
}
// Method that gets instance
public static PageStyle GetInstance()
{
if (_Instance == null)
_Instance = new PageStyle();
return _Instance;
}
private void InitializeWebDB()
{
if (webDB == null)
{
webDB = Sitecore.Configuration.Factory.GetDatabase("web");
}
}
private void InitializeStartItem()
{
if (webDB != null)
{
item = webDB.Items[StartItem];
}
}
public string StartItem
{
get
{
return _startItem;
}
set
{
_startItem = value;
}
}
}
答案 0 :(得分:3)
您永远不会将其设置为值。您可能会思考,但您实际上只设置了一个具有相同名称的局部变量。此外,当它始终为null时,您正在检查webDB
变量的非空值:
// constructor
private PageStyle()
{
if (webDB != null)
{
webDB = Sitecore.Configuration.Factory.GetDatabase("web");
Sitecore.Data.Items.Item item = webDB.Items[StartItem];
}
}
将其更改为:
// constructor
private PageStyle()
{
this.webDB = Sitecore.Configuration.Factory.GetDatabase("web");
this.item = webDB.Items[StartItem];
}
我假设你总是需要一个数据库实例,并且if (webDB != null)
是一个错误。
答案 1 :(得分:2)
也许您打算在构造函数中分配item
:
private PageStyle()
{
if (webDB != null)
{
webDB = Sitecore.Configuration.Factory.GetDatabase("web");
this.item = webDB.Items[StartItem];
}
}
另外,请确保在某处调用InitializeWebDB
私有方法,否则webDB
变量也将为空。
像这样:
private PageStyle()
{
InitializeWebDB();
if (webDB != null)
{
this.item = webDB.Items[StartItem];
}
}
答案 2 :(得分:0)
构造函数中有一个本地项目实例,它会影响类级别字段。
答案 3 :(得分:0)
你没有在构造函数中初始化它,你创建一个具有相同名称的新局部变量,使用:
// constructor
private PageStyle()
{
webDB = Sitecore.Configuration.Factory.GetDatabase("web");
this.item = webDB.Items[StartItem];
}
答案 4 :(得分:0)
也许将webDB init方法放在类之外并使其成为静态不会有害。在您的代码中,您正在检查webDB与null以及GetDatabase()方法中的两次。
您可以像这样对此部分进行编码:
public class PageStyle
{
private static PageStyle _Instance;
// Instantiate variables relating to sitecore item paths.
private static readonly Database webDB = DbInitializer.InitializeWebDb("web");
...