2
我正在製作一個與設備通信的應用程序。這可以通過多種物理方式完成,即串行端口和網絡(串行端口上的單個設備,網絡上的多個設備)。IoC,多接口實現
每個設備的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) { .. }
}
該「服務」,其具有一串用於發送使用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)
{ .. }
}
此前我j在我需要的地方,ust在構造函數中導入了IMessagingService
,並且工作得很好。但是現在我添加了ICommunication
的第二個實現,這個策略失敗了。
在應用程序的生命週期中,它將有一個用於在串行端口上通信的DeviceViewModel
實例。其他實例使用網絡服務。
如何用「正確」方式解決這個問題?我應該以不同的方式建模嗎