Пример использования 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