2010-12-09 20 views
1

我有兩個具有通用底層基礎結構的項目。首先是Silverlight 3中,第二個是的Silverlight 4.何時DependencyProperty的DefaultValue通過PropertyMetadata定義獲得它的值?

我有一個ViewRegionControl,這是我在XAML聲明來定義區域。 ViewRegionControl類負責管理哪些註冊的視圖可見和更多。它有一個依賴項屬性,用作註冊區域的註冊表。

public static readonly DependencyProperty ViewRegionRegistryProperty = DependencyProperty.Register(
      "ViewRegionRegistry", 
      typeof(IViewRegionRegistry), 
      typeof(ViewRegionControl), 
      new PropertyMetadata(IoC.TryResolve<IViewRegionRegistry>())); 

public IViewRegionRegistry ViewRegionRegistry 
{ 
    get { return (IViewRegionRegistry)GetValue(ViewRegionRegistryProperty); } 
    set { SetValue(ViewRegionRegistryProperty, value); } 
} 

將默認值作爲從IoC容器實例化的對象傳遞。在這兩種實現中,ViewRegionRegistry不是由XAML設置的,只能通過這個位置。

預期的初始化在我的Silverlight 3項目中成功發生,但不在我的Silverlight 4項目中。 Silverlight 4中發生了哪些變化?在Silverlight 4中,依賴項屬性是否會默認獲取它的默認值?

這裏的意圖是建立通過ViewRegionRegistry DP獲得一個Singleton參考。

檢查http://msdn.microsoft.com/en-us/library/cc903949%28v=VS.95%29.aspx

雖然,我用一個DP在另一個DP的回調和MSDN清清楚楚地寫着:

「,以避免這些問題的方法之一是確保回調只使用其他依賴屬性,那每個這樣的依賴項屬性都有一個建立的默認值作爲其註冊元數據的一部分。「

我做到了。爲什麼版本之間的行爲不同?

+0

以何種方式是「Silverlight 4的一個」 unsuccessfull?一個錯誤? IoC沒有找到一些提供`IViewRegionRegistry`實現的導出?什麼? – AnthonyWJones 2010-12-10 08:34:40

回答

0

必須在該類型的靜態初始化發生時建立默認值。所以我懷疑這個問題真的是靜態初始化的時間在Silverlight 3和4之間改變了嗎?

發生了什麼變化是,代碼Silverlight 4中執行基於在CLR 4.已經有更改時類型初始化器3.5和4之間執行請參閱本文Type initialization changes in .NET 4.0(有些傢伙叫喬恩斯基特) 。

一兩件事,因此你可以嘗試是一個空的靜態構造函數添加到您的類型,看看是否有幫助: -

public static ViewRegionControl() { } 
相關問題