Как создать параметр, если тип параметра должен быть абстрактным классом - PullRequest
0 голосов
/ 19 сентября 2019

Я создаю приложение для чата, и оно имеет много типов, например: text, image, card, и карточное сообщение очень отличается от сообщения text.Я не хочу создавать простой метод для обработки каждого сообщения, потому что сообщение будет потеряно, если клиент не поддерживает этот тип сообщения (я хочу, чтобы вместо «ничего не происходило» отображался «неподдерживаемый тип сообщения»)

Что мне делать на стороне сервера?

public async Task GroupMessage(string groupId, IMessage message) // the IMessage will lose many thing
{
}

1 Ответ

0 голосов
/ 19 сентября 2019

Проблема в том, что то, что приходит от клиента, это не что иное, как некоторые строковые данные.SignalR должен связать это с типом в вашем обработчике.Поэтому все, что у вас осталось, это IMessage, а не что-то вроде Text или Image.

. Для этого у вас нет выбора, кроме как иметь разные обработчики, по одному для каждого типа.Это единственный способ связать все данные и затем успешно взаимодействовать с этими данными.Вы не можете использовать абстрактный класс или интерфейс, если только вы не можете использовать только данные, существующие в этом классе или интерфейсе.

...