У меня есть класс сообщений, который будет иметь полезную нагрузку, которую я хочу определить, используя Generic
IMessage.cs
public interface IMessage
{
/// <summary>
/// Flags
/// </summary>
MessageFlag Flags { get; set; }
/// <summary>
/// Command
/// </summary>
MessageCommand Command { get; set; }
}
ICarryPayload.cs
public interface ICarryPayload<out TPayload>
{
TPayload Payload { get; }
}
IMessageOfPayload.cs
public interface IMessage<out TPayload> : IMessage, ICarryPayload<TPayload>
{
}
затем я определяю одно из моих сообщений следующим образом:
public class VersionMessage : IMessage<VersionPayload>
{
public MessageFlag Flags { get; set; }
public MessageCommand Command { get; set; }
public VersionPayload Payload { get; private set; }
public VersionMessage()
{
this.Command = MessageCommand.version;
this.Payload = new VersionPayload();
}
public VersionMessage(VersionPayload payload)
{
this.Command = MessageCommand.version;
this.Payload = payload;
}
}
У меня будет несколько сообщений регистрации.
Будет метод, который получит и десериализует сообщение и выберет тип сообщения и его полезную нагрузку.
В этом классе я хотел бы получить список IMessage <> и иметь возможность выполнять итерацию во всех реализациях и решать, какой экземпляр сообщения я хочу.
чтобы зарегистрироваться я думал делать:
container.RegisterType(
typeof(IMessage<>), typeof(VersionMessage), MessageCommand.version.ToString());
Как я могу вставить это IMessage <> в конструктор?
Есть ли другой способ создать такую фабрику, которая даст мне правильный экземпляр сообщения?
TKX много
Пауло Абоим Пинто