Пример использования Shared Services. призма

У меня есть 5 модулей, и я использую шаблон EventAggregator для связи между модулями. И мне кажется, что мой код становится уродливым, и использование EventAggregator в моем проекте - плохой дизайн.

Существует три способа связи между модулями:

  • Слабосвязанные события
  • Общие сервисы
  • Общие ресурсы

Я хотел бы узнать больше о связи через Shared Services. Я нашел статью о приложении StockTrader из Prism ToolKit.

Есть ли более простой и понятный пример использования Shared Services в Prism, где можно увидеть взаимодействие между модулями с помощью Shared Services? (загружаемый код будет высоко ценится)

2 ответа

Решение

Каким образом ваш код становится уродливым? EventAggregator это общий сервис, если хотите.

Вы помещаете сервисный интерфейс в общую сборку, и затем один модуль может, скажем, передавать данные в сервис, в то время как другой модуль получает данные из сервиса.

Редактировать:

Общая сборка

public interface IMySharedService
{
    void AddData( object newData );
    object GetData();
    event System.Action<object> DataArrived;
}

Первый коммуникационный модуль

// this class has to be resolved from the unity container, perhaps via AutoWireViewModel
internal class SomeClass
{
    public SomeClass( IMySharedService sharedService )
    {
        _sharedService = sharedService;
    }

    public void PerformImport( IEnumerable data )
    {
        foreach (var item in data)
            _sharedService.AddData( item );
    }

    private readonly IMySharedService _sharedService;
}

Второй коммуникационный модуль

// this class has to be resolved from the same unity container as SomeClass (see above)
internal class SomeOtherClass
{
    public SomeOtherClass( IMySharedService sharedService )
    {
        _sharedService = sharedService;
        _sharedService.DataArrived += OnNewData;
    }

    public void ProcessData()
    {
        var item = _sharedService.GetData();
        if (item == null)
            return;

        // Do something with the item...
    }

    private readonly IMySharedService _sharedService;
    private void OnNewData( object item )
    {
        // Do something with the item...
    }
}

Инициализация какого-то другого модуля

// this provides the instance of the shared service that will be injected in SomeClass and SomeOtherClass
_unityContainer.RegisterType<IMySharedService,MySharedServiceImplementation>( new ContainerControlledLifetimeManager() );

В репозитории Prism Library на GitHub имеется обновленная версия примера приложения Stock Trader, включающая примеры сервисов и исходный код, которые вы можете посмотреть и скачать.

https://github.com/PrismLibrary/Prism-Samples-Wpf/tree/master/StockTraderRI

Другие вопросы по тегам