2010-06-08 5 views
0

Classe partielle publique HTCmds: ResourceDictionary { private ICanvasService mCanvasService;Unité: Injection de dépendances

 [Dependency] 
     public ICanvasService CanvasService 
     { 
      get { return mCanvasService; } 
      set { mCanvasService = value; } 
     } 

     public HTCmds() 
     { 
      CopyCommand = new DelegateCommand<object>(this.Copy, this.CanCopy); 
      ExitCommand = new DelegateCommand<object>(this.Exit); 
     } 

     public DelegateCommand<object> CopyCommand { get; private set; } 
     public DelegateCommand<object> ExitCommand { get; private set; } 
} 

ressources Dictionnaire Xaml:

<ResourceDictionary x:Class="HTCmds" 
        x:ClassModifier="public" 
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
        xmlns:commands="clr-namespace:Commands;assembly=UIInfrastructure" 
        xmlns:r="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary" 
        xmlns:local="clr-namespace:Commands.Commands"> 
    <local:HTCmds x:Key="thisobj"/> 
    <commands:CommandReference x:Key="CopyCommandReference" Command="{Binding Source={StaticResource thisobj}, Path=CopyCommand}"/> 
    <commands:CommandReference x:Key="ExitCommandReference" Command="{Binding Source={StaticResource thisobj}, Path=ExitCommand}"/> 
</ResourceDictionary> 

Je suis donc inscrit le ICanvasService mais il ne s'injecté dans cette classe. Ressource de dictionnaire est fusionné dans le fichier XAML d'une classe de fenêtres:

<ResourceDictionary> 
    <ResourceDictionary.MergedDictionaries> 
     <ResourceDictionary Source="../Commands/HTCmds.xaml" /> 
    </ResourceDictionary.MergedDictionaries> 
</ResourceDictionary> 

Y at-il quelque chose de spécifique à la classe ResourceDictionary?

Merci & Cordialement, Vishal.

+0

Quelle est votre question? Pourquoi pensez-vous que quelque chose ne va pas? Que devrions-nous rechercher dans le code? – Sjoerd

+0

Je ne parviens pas à obtenir ICanvasService. – Vishal

+0

Où est votre inscription à Unity? Où inscrivez-vous ICanvasService type? – Vadim

Répondre

1

Votre HTCmds objet est créé par WPF par cette ligne de XAML:

<local:HTCmds x:Key="thisobj"/> 

WPF n'a pas connaissance de l'unité il ne sait pas comment résoudre les dépendances à l'aide de l'unité. Vous devez résoudre les objets en utilisant UnityContainer.Resolve. Vous ne pouvez pas compter sur WPF pour le faire pour vous.

+0

Selon Unity, si je décore une propriété avec l'attribut [Dependency] alors il devrait résoudre la dépendance. Par ailleurs, comment puis-je résoudre UnityContainer? Si je peux résoudre le conteneur Unity, je peux résoudre ICanvasService. – Vishal

+1

L'unité ne peut être résolue que si vous utilisez réellement Unity pour créer vos objets. Il n'intercepte pas magiquement la création d'objets et résout les dépendances. –

+0

Merci !!! Je vais changer la conception pour implémenter des commandes – Vishal

Questions connexes