2014-01-17 1 views
1

Я пытаюсь получить зависание, но проблема. Попытка «Обмен сообщениями через атрибут» получает ошибку компиляции.Попытка «Обмен сообщениями через атрибут» из документации

«Catel.MVVM.ViewModelBase.GetService (объект)» устарел: «GetService больше не рекомендуется». Лучше вводить все зависимости (которые полностью поддерживает TypeFactory)> Будет удалено в версии 4.0.0. '

private void OnCmdExecute() 
    { 
     var mediator = GetService<IMessageMediator>(); 
     mediator.SendMessage("Test Value"); 
    } 

    [MessageRecipient] 
    private void ShowMessage(string value) 
    { 
     var messageService = GetService<IMessageService>(); 
     messageService.Show(value); 
    } 

Я использую 3.9. Подсказка и фрагмент кода, которые могут быть полезными. Спасибо за внимание.

ответ

1

GetService отмечен как устаревший. У вас есть 2 варианта:

1) Если вы используете модель представления, просто пусть службы будет введен в конструкторе:

private readonly IMessageMediator _messageMediator; 
private readonly IMessageService _messageService; 

public MyViewModel(IMessageMediator messageMediator, IMessageService messageService) 
{ 
    Argument.IsNotNull(() => messageMediator); 
    Argument.IsNotNull(() => messageService); 

    _messageMediator = messageMediator; 
    _messageService= messageService; 
} 

2) Используйте метод расширения GetDependencyResolver:

var dependencyResolver = this.GetDependencyResolver(); 
var messageMediator = dependencyResolver.Resolve<IMessageMediator>(); 

Решение 1 является рекомендуемым способом.

0

Спасибо за ваш ответ. Я также нашел хороший пример в решении «Catel.Examples», link to download