0

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

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

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

4

1 回答 1

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

我强烈建议不要使用静态类,因为它只会使您的应用程序不那么灵活,并且与服务相比,您一无所获。

于 2016-12-07T18:27:49.187 回答