Unity: инъекция зависимостей - PullRequest
0 голосов
/ 08 июня 2010

открытый частичный класс HTCmds: ResourceDictionary {private ICanvasService mCanvasService;

        [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, но он не вводится в этот класс,Словарь ресурсов объединен в файле xaml класса Windows:

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

Есть ли что-то особенное в классе ResourceDictionary?

Спасибо и с уважением, Вишал.

1 Ответ

1 голос
/ 08 июня 2010

Ваш объект HTCmds создается WPF с помощью этой строки XAML:

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

WPF не знает Unity, поэтому он не знает, как разрешить зависимости с помощью Unity.Вам нужно разрешить объекты, используя UnityContainer.Resolve.Вы не можете полагаться на то, что WPF сделает это за вас.

...