Как использовать параметры с одинаковыми именами в зависимости от их применения?
У меня есть метод, который должен принимать либо SubscriptionsPageViewModel, либо SubscriptionsTreePageViewModel.
Я не понимаю, как дать возможность методу иметь эти два параметра:
public Task<MqttClientPublishResult> Publish( SubscriptionsPageViewModel options, SubscriptionsTreePageViewModel options )
{
if ( options == null ) throw new ArgumentNullException( nameof( options ) );
ThrowIfNotConnected();
var applicationMessage = new MqttApplicationMessageBuilder()
.WithTopic(options.Topic)
.WithPayload(options.GeneratePayload())
.Build();
return _mqttClient.PublishAsync( applicationMessage );
}
У меня просто есть метод для отправки сообщений и он использует вьюмодель, в которой находится:
public async Task Publish()
{
try
{
var result = await _mqttClientService.Publish( this );
}
catch (Exception exception)
{
App.ShowException( exception );
}
}
Ответы (1 шт):
Автор решения: Igor
→ Ссылка
public Task<MqttClientPublishResult> Publish(SubscriptionsPageViewModel options)
{
if (options == null)
throw new ArgumentNullException(nameof(options));
return Publish(options.Topic, options.GeneratePayload());
}
public Task<MqttClientPublishResult> Publish(SubscriptionsTreePageViewModel options)
{
...
}
private Task<MqttClientPublishResult> Publish(Topic topic, Payload payload)
{
ThrowIfNotConnected();
var applicationMessage = new MqttApplicationMessageBuilder()
.WithTopic(topic)
.WithPayload(payload)
.Build();
return _mqttClient.PublishAsync( applicationMessage );
}
interface ISubscriptionsViewModel
{
Topic Topic { get; set; }
Payload GeneratePayload();
}
class SubscriptionsPageViewModel : ISubscriptionsViewModel
{
...
}
class SubscriptionsTreePageViewModel : ISubscriptionsViewModel
{
...
}
public Task<MqttClientPublishResult> Publish(ISubscriptionsViewModel options)
{
...
}