代码之家  ›  专栏  ›  技术社区  ›  StepUp

使用共享服务的示例。棱镜

  •  3
  • StepUp  · 技术社区  · 8 年前

    我有5个模块,我正在使用 事件聚合器 模块之间通信的模式。在我看来,我的代码变得很难看,使用起来很糟糕 事件聚合器 在我的项目中。

    模块之间有三种通信方式:

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

    我想通过 共享服务 我发现了一篇关于 StockTrader application from Prism ToolKit .

    是否有更轻量级、更清晰的使用示例 共享服务 在Prism中,可以使用 共享服务 ? (非常感谢可下载的代码)

    2 回复  |  直到 8 年前
        1
  •  5
  •   Haukinger    8 年前

    你的代码在哪方面变得难看?这个 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() );
    
        2
  •  1
  •   R. Richards    8 年前

    GitHub上的Prism Library repo有最新版本的Stock Trader示例应用程序,其中包括服务示例和源代码供您查看和下载。

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