我的变量永远不会被设置

时间:2012-01-18 10:54:00

标签: c# asp.net .net singleton

继续: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;   
    }

1 个答案:

答案 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);

这会设置它并让我获得理想的效果。