2016-12-07 36 views
0

很长一段时间,我定期搜索有关在多模块Prism MVVM应用程序中创建对串行端口的共享访问的信息,但没有任何好的论文。因此,我在这里向你致辞。我在Windows 10 64位操作系统中使用MS VS 2015 Professional开发了C#WPF MVVM Prism 6应用程序。将该溶液组成为:在Prism 6多模块WPF MVVM应用程序中创建共享串行端口访问的最佳方式是什么?

  1. 壳牌(主窗口)项目。
  2. 多个棱镜模块项目。
  3. ClassLibrary项目可以从所有这些棱镜模块 和Shell进行全局访问。

我需要从应用程序中的所有Prism模块的一个串行端口实例共享访问以与外部设备进行通信。 解决共享串口问题的最佳方法是什么? 如果我将SerialPort创建为公共静态成员并将其放置在上述ClassLibrary中的一个静态类中,那么这种方法是否是最好的?或者把这样的SerialPort实例放在共享服务中会是最好的?或者有关共享SerialPort实例的其他任何解决方案都有位置? 那么请指教我如何在多模块Prism 6 WPF MVVM应用程序中定义全局访问的共享SerialPort?

回答

0

创建共享类库中的串行端口接口,实现它的模块之一,其注册为独立的,并使用你喜欢的地方:

// in the class lib: 
public interface ISerialPortService 
{ 
    void SendSomething(); 
} 

// in a one of the modules: 
public class OneModule : IModule 
{ 
    public OneModule(IUnityContainer container) 
    { 
     _container = container; 
    } 

    public void Initialize() 
    { 
     _container.RegisterType<ISerialPortService, MySerialPortImplementation>(new ContainerControlledLifetimeManager()); 
    } 

    private readonly IUnityContainer _container; 
} 

internal class MySerialPortImplementation : ISerialPortService 
{ 
    // ... implement all the needed functionality ... 
} 

// somewhere else... 
internal class SerialPortConsumer 
{ 
    public SerialPortConsumer(ISerialPortService serialPort) 
    { 
     _serialPort = serialPort; 
    } 

    public void SomeMethod() 
    { 
     _serialPort.SendSomething(); 
    } 

    private readonly ISerialPortService _serialPort; 
} 

我会强烈反对一静态类,因为它只会让你的应用程序变得更加灵活,并且与服务相比你一无所获。

+0

非常感谢,豪金格。我会遵照你的建议。如果我有一些问题,我会写在这里。 – Prohor

+0

Haukinger,你是否(在你的例子中)实现ISerialPortService并将其注册为同一个模块中的单例?与在Bootstrapper中注册的共享服务有什么不同? – Prohor

+0

实现和注册总是发生在同一模块中,因为大多数情况下,实现是“内部”的,并且模块不会互相引用。无论你是在一个模块中执行还是引导程序都无关紧要,引导程序,也就是应用程序,只是另一个带有特殊名称的模块,可以这么说。该服务的共享,因为它的接口是共享的... – Haukinger

相关问题