2010-06-08 114 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