我正在与一个设备通信的应用程序。这可以在多个物理方式,即串行端口和网络(串行端口上单个设备,网络上的多个设备)来完成。
每个设备的需要的ViewModels注入了正确的服务。
到目前为止,我只用通信的一种形式,所以这是简单,有一个单一出口的接口。不过,我添加了一个串口现在也,而这也正是事情变得对我来说有点模糊。
用于实际通信的接口和实现:
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) { .. }
}
“服务”,它有一堆用于使用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在“正确”的方式解决这个问题?我应该不同模型呢?
你可以专注你的网络和串行通信通信。
public interface ICommunication
{
byte[] Send(byte[] message);
}
public interface ISerialCommunication : ICommunication
{
}
public interface INetworkCommunication : ICommunication
{
}
public class SerialCommunication : ISerialCommunication
{
public byte[] Send(byte[] message) { .. }
}
public class NetworkCommunication : INetworkCommunication
{
public byte[] Send(byte[] message) { .. }
}