2010-06-08 66 views
0

public partial class HTCmds:ResourceDictionary { private ICanvasService mCanvasService;Unity:Dependency Injection

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

资源词典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> 

我已经注册了ICanvasService,但它不是在这个类中得到注入。资源词典合并在Windows类的xaml文件中:

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

ResourceDictionary类是否有特定的内容?

谢谢& Regards, Vishal。

+0

你的问题是什么?你为什么觉得有什么不对?我们应该在代码中寻找什么? – Sjoerd 2010-06-08 14:16:49

+0

我无法获得ICanvasService。 – Vishal 2010-06-08 15:09:42

+0

你的Unity注册在哪里?你在哪里注册ICanvasService类型? – Vadim 2010-06-08 15:52:33

回答

1

你HTCmds目标是通过WPF创建该行XAML的:

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

WPF还没有统一的认识,因此不知道如何解决使用Unity的依赖关系。您需要使用UnityContainer.Resolve来解析对象。你不能依赖WPF为你做这件事。

+0

根据统一,如果我用[Dependency]属性修饰一个属性,那么它应该解决依赖关系。顺便说一句,我该如何解决UnityContainer?如果我可以解析Unity容器,那么我可以解析ICanvasService。 – Vishal 2010-06-08 14:57:41

+1

只有在您实际使用Unity创建对象时,Unity才能解决问题。它不会奇迹般地拦截对象创建并解决依赖关系。 – 2010-06-08 16:06:24

+0

谢谢!我将改变设计来实现命令 – Vishal 2010-06-09 04:57:54