2012-01-18 165 views
1

好吧,我得到了下面的類,但產品總是空當我GetIstance(); Visual Studio中顯示:爲什麼它總是一個空值?

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; 
    } 
} 
} 

回答

3

您從未將其設置爲某個值。你可能會認爲認爲,但你真的只設置一個具有相同名稱的局部變量。此外,你檢查一次非空值的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)是一個錯誤。

+0

+1正是我要回答 – Nuffin 2012-01-18 09:12:45

+0

尼斯,基本上是做這種方式我可以擺脫初始化WebDB()方法。如果工作,乾杯夥伴將標記爲答案。 – Anicho 2012-01-18 10:03:12

0

在構造函數中有一個項目的本地實例,它映射了類級別字段。

0

你不初始化它在構造函數中,您創建具有相同名稱的一個新的局部變量,使用:

// constructor 
private PageStyle() 
{ 
    webDB = Sitecore.Configuration.Factory.GetDatabase("web"); 
    this.item = webDB.Items[StartItem]; 
} 
+0

這仍然不會設置任何值。 – 2012-01-18 09:14:26

+0

不錯,刪除了if語句,儘管其他人現在已經提供了更好的答案:-S – RobJohnson 2012-01-18 09:56:30

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]; 
    } 
} 
0

或許將外部類的webDB init方法,使之靜就不會受到傷害。在你的代碼中,你正在檢查webDB兩次以及GetDatabase()方法。

你可以這樣這部分代碼:

public class PageStyle 
{ 
    private static PageStyle _Instance; 

    // Instantiate variables relating to sitecore item paths. 
    private static readonly Database webDB = DbInitializer.InitializeWebDb("web"); 
    ... 
相關問題