继续:Why will it always be a null value?
当实例中的PageStyle.GetInstance().StartItem = MyWantedStartItem;
StartItem保持为null且未更新时,使我的类无法使用。这反过来又返回一个项不能为空的错误。
我想知道为什么会这样,我该怎么做才能解决它?还有更好的方法吗?
访问该对象的类:
public partial class MainLayout : System.Web.UI.Page
{
public string StartItem;
protected void Page_Load(object sender, EventArgs e)
{
GetStartItem();
SetStartItem();
InitializeCSS();
}
private void GetStartItem()
{
StartItem = Sitecore.Context.Item.Paths.FullPath;
}
private void SetStartItem()
{
PageStyle.GetInstance().StartItem = StartItem;
}
private void InitializeCSS()
{
Body.Attributes.Add("style", "background-color: " + PageStyle.GetInstance().BackgroundColor); // Body background color
}
}
正在访问的类有:
private static PageStyle _Instance = null;
// Instantiate variables relating to sitecore item paths.
Database webDB;
Sitecore.Data.Items.Item item;
private string _startItem;
public string StartItem
{
get
{
return _startItem;
}
set
{
_startItem = value;
}
}
// constructor
private PageStyle()
{
this.webDB = Sitecore.Configuration.Factory.GetDatabase("web");
this.item = webDB.Items[StartItem];
}
// Method that gets instance
public static PageStyle GetInstance()
{
if (_Instance == null)
_Instance = new PageStyle();
return _Instance;
}
答案 0 :(得分:0)
通过这样做解决:
// constructor
private PageStyle(string item)
{
this.webDB = Sitecore.Configuration.Factory.GetDatabase("web");
this.item = webDB.Items[item];
}
public static PageStyle GetInstance(string item)
{
lock (lockObject)
{
if (_Instance == null)
_Instance = new PageStyle(item);
}
return _Instance;
}
然后,当我需要实例时,我定义了我要使用的开始项目。
PageStyle.GetInstance(MyItem);
这会设置它并让我获得理想的效果。