gpt4 book ai didi

c# - 使用共享服务的示例。 Prism

转载 作者:太空宇宙 更新时间:2023-11-03 21:15:21 31 4
gpt4 key购买 nike

我有 5 个模块,我使用 EventAggregator 模式在模块之间进行通信。在我看来,我的代码变得丑陋,而且在我的项目中使用 EventAggregator 是糟糕的设计。

模块间通信的三种方式:

  • 松耦合事件
  • 共享服务
  • 共享资源

我想了解更多关于共享服务的通信。我发现的是一篇关于 StockTrader application from Prism ToolKit 的文章.

是否有在 Prism 中使用共享服务的更轻量级和更清晰的示例,可以看到使用共享服务的模块之间的对话? (可下载的代码将不胜感激)

最佳答案

您的代码在哪些方面变得丑陋?如果您愿意,EventAggregator 是一项共享服务。

您将服务接口(interface)放在共享程序集中,然后一个模块可以将数据推送到服务中,而另一个模块则从服务中获取数据。

编辑:

共享程序集

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() );

关于c# - 使用共享服务的示例。 Prism ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34741727/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com