我正在创建一个与设备通信的应用程序。这可以通过多种物理方式完成,即串行端口和网络(串行端口上的单个设备,网络上的多个设备)。
每个设备的ViewModel都需要注入正确的服务。
到目前为止,我只使用了一种形式的通信,因此对接口进行单一导出很简单。但是,我现在也为串口添加了一个,这对我来说有点模糊。
实际沟通的界面和实现:
public interface ICommunication
{
public byte[] Send(byte[] message);
}
[Export(typeof(ICommunication)]
[PartCreationPolicy(CreationPolicy.Shared)]
public class SerialCommunication : ICommunication
{
public byte[] Send(byte[] message) { .. }
}
[Export(typeof(ICommunication)]
[PartCreationPolicy(CreationPolicy.Shared)]
public class NetworkCommunication : ICommunication
{
public byte[] Send(byte[] message) { .. }
}
" service",它有一堆使用ICommunication
发送消息并返回回复的方法:
[Export(typeof(IMessagingService)]
[PartCreationPolicy(CreationPolicy.Shared)]
public class MessagingService : IMessagingService
{
ICommunication _communication;
[ImportingConstructor]
public MessagingService(ICommunication communication)
{
_communication = communication;
}
public DateTime GetDeviceTime()
{
var response = _communication.Send(new GetTimeMessage().Serialize());
}
...
}
使用服务的ViewModel:
[Export(typeof(DeviceViewModel)]
public class DeviceViewModel
{
IMessagingService _service;
[ImportingConstructor]
public DeviceViewModel(IMessagingService service)
{ .. }
}
之前我只是在构造函数中导入IMessagingService
,无论我需要它,这都很有效。但是现在我添加了ICommunication
的第二个实现,这个策略失败了。
在应用程序的生命周期内,它将有一个DeviceViewModel
实例,用于在串行端口上进行通信。其他实例使用网络服务。
如何在"纠正"中使用MEF解决这个问题?办法?我应该以不同的方式建模吗
答案 0 :(得分:1)
您可以专门针对网络和串行通信进行ICommunucation。
------
| B1 |
------
| 0 |
| 1 |
| 0 |