在Prism 6多模块WPF MVVM应用程序中创建共享串行端口访问的最佳方法是什么?

时间:2016-12-07 12:29:47

标签: c# wpf mvvm prism prism-6

很长一段时间以来,我定期搜索有关在多模块Prism MVVM应用程序中创建串口共享访问的信息,但没有任何好的论文。所以我在这里向你致辞。我在Windows 10 64位操作系统中使用MS VS 2015 Professional开发了C#WPF MVVM Prism 6应用程序。解决方案包括:

  1. Shell(主窗口)项目。
  2. 多个Prism模块项目。
  3. ClassLibrary项目,可以从所有这些Prism模块进行全局访问 来自壳牌。
  4. 我需要从应用程序中的所有Prism模块共享访问一个SerialPort实例,以便与外部设备进行通信。 解决共享串口问题的最佳方法是什么? 如果我将SerialPort创建为公共静态成员并将其放在上面提到的ClassLibrary中的一个静态类中,那么这种方式会是最好的吗?或者将这样的SerialPort实例放在共享服务中会是最好的?或者有关共享SerialPort实例的任何其他解决方案? 那么请建议我如何在多模块Prism 6 WPF MVVM应用程序中定义全局访问的共享SerialPort?

1 个答案:

答案 0 :(得分:0)

在共享类库中为串口创建一个接口,在其中一个模块中实现它,将其注册为singleton并在任何你喜欢的地方使用它:

// 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;
}

我强烈反对静态类,因为它只会使你的应用程序不那么灵活,而且与服务相比你什么也得不到。