Моя переменная никогда не устанавливается - PullRequest
0 голосов
/ 18 января 2012

Продолжение с: Почему это всегда будет нулевое значение?

Когда I PageStyle.GetInstance().StartItem = MyWantedStartItem; StartItem внутри экземпляра остается нулевым и не обновляется, что делает мой класс непригодным для использования.Это в свою очередь возвращает элемент не может быть нулевой ошибкой.

Снова я хочу знать, почему это происходит, что я могу сделать, чтобы решить это?И есть ли лучший способ сделать это?

Класс, обращающийся к объекту:

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 голосов
/ 18 января 2012

Решено следующим образом:

    // 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);

Который установит его и получит желаемый эффект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...