很长一段时间以来,我定期搜索有关在多模块Prism MVVM应用程序中创建串口共享访问的信息,但没有任何好的论文。所以我在这里向你致辞。我在Windows 10 64位操作系统中使用MS VS 2015 Professional开发了C#WPF MVVM Prism 6应用程序。解决方案包括:
我需要从应用程序中的所有Prism模块共享访问一个SerialPort实例,以便与外部设备进行通信。 解决共享串口问题的最佳方法是什么? 如果我将SerialPort创建为公共静态成员并将其放在上面提到的ClassLibrary中的一个静态类中,那么这种方式会是最好的吗?或者将这样的SerialPort实例放在共享服务中会是最好的?或者有关共享SerialPort实例的任何其他解决方案? 那么请建议我如何在多模块Prism 6 WPF MVVM应用程序中定义全局访问的共享SerialPort?
答案 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;
}
我强烈反对静态类,因为它只会使你的应用程序不那么灵活,而且与服务相比你什么也得不到。