Мы пытаемся реализовать пакет обмена сообщениями для включения в другой проект. Для этого мы хотим создать пакет Nuget, но у нас возникли проблемы с его реализацией в нашей кодовой базе.
Мы реализовали наш интерфейс IMessageHandler, но он дает нам синтаксическую ошибку. Ниже представлена наша реализация интерфейса и сам интерфейс.
public class RegisterEmailHandler : IMessageHandler<Sendable>
{
public Task HandleMessageAsync(string messageType, Sendable sendable)
{
throw new NotImplementedException();
}
}
/// <summary>
/// The default message handler. Emits the received message data as <see cref="byte[]"/>
/// </summary>
public interface IMessageHandler
{
Task HandleMessageAsync(string messageType, byte[] obj);
}
/// <summary>
/// Typed variant of <see cref="IMessageHandler"/>. This serializes the <see cref="byte[]"/> of <see cref="IMessageHandler.HandleMessageAsync(string, byte[])"/> into <typeparamref name="TMessage"/>
/// </summary>
/// <typeparam name="TMessage"></typeparam>
public interface IMessageHandler<TMessage> : IMessageHandler where TMessage : class
{
/// <summary>
/// Default interface implementation of <see cref="IMessageHandler.HandleMessageAsync(string, byte[])"/>
/// </summary>
Task IMessageHandler.HandleMessageAsync(string messageType, byte[] obj)
{
return HandleMessageAsync(messageType, JsonSerializer.Deserialize<TMessage>(obj));
}
Task HandleMessageAsync(string messageType, TMessage message);
}
Если мы также загрузим его в Nuget и включим пакет, мы получим следующее исключение:
Interface member 'Task MessageBroker.IMessageHandler.HandleMessageAsync(string, byte[])' is not implemented
Когда мы добавляем, мы загружаем код и добавляем пакет в качестве локальной ссылки, он действительно работает, но не тогда, когда мы помещаем его в Nuget и добавляем пакет Nuget. Кто-нибудь знает, почему это не работает?
Наше текущее решение помещает отсутствующий метод в реализацию с кодом из реализации по умолчанию из интерфейса.