2010-12-09 3 views
1

J'ai deux projets avec une infrastructure sous-jacente commune. Le premier est Silverlight 3 et le second est Silverlight 4.Quand la DefaultValue d'un DependencyProperty gagne-t-elle sa valeur à travers la définition PropertyMetadata?

J'ai un ViewRegionControl, que je déclare en XAML pour définir des régions. La classe ViewRegionControl est responsable de la gestion de la vue enregistrée visible et plus encore. Il possède une propriété de dépendance qui sert de registre pour les régions enregistrées.

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

La valeur par défaut est transmise en tant qu'objet instancié à partir de mon conteneur IoC. Dans les deux implémentations, ViewRegionRegistry n'est pas défini par XAML nulle part et uniquement via ce point.

L'initialisation prévue se produit avec succès sur mon projet Silverlight 3 mais pas sur mon projet Silverlight 4. Qu'est-ce qui a changé dans Silverlight 4? Une propriété de dépendance obtient-elle par défaut la valeur par défaut dans Silverlight 4?

L'intention ici est de créer une référence Singleton obtenue via ViewRegionRegistry dp.

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

Bien que, je l'une dp dans le rappel et msdn d'un autre dp dit clairement:

« Une façon d'éviter ces problèmes est de faire en sorte que les callbacks utilisent uniquement d'autres propriétés de dépendance, et que chaque propriété de dépendance a une valeur par défaut établie dans le cadre de ses métadonnées enregistrées. "

Je l'ai fait. Pourquoi le comportement diffère-t-il entre les versions?

+0

De quelle façon est le « Silverlight 4 une » infructueuse? une erreur? L'IoC ne trouve pas d'export offrant une implémentation de 'IViewRegionRegistry'? Quelle? – AnthonyWJones

+0

ViewRegionRegistry est toujours null. Bien que, IoC.TryResolve () est OK, après avoir vérifié cet appel dans la fenêtre immédiate. –

Répondre

0

La valeur par défaut doit être établie au moment de l'initialisation statique pour le type. Donc, je soupçonne que la question est vraiment le moment de l'initialisation statique changé entre Silverlight 3 et 4?

Ce qui a changé est que Silverlight 4 exécution de code est basé sur CLR 4. Il y a eu des changements au initializers lorsque type sont exécutées entre 3,5 et 4. Voir cet article Type initialization changes in .NET 4.0 (par un mec appelé Jon Skeet) .

Une chose que vous pourriez donc essayer est d'ajouter un vide constructeur statique à votre type pour voir si cela aide: -

public static ViewRegionControl() { } 
Questions connexes