При использовании Unity, как разрешить в конструкторе универсальный тип с любым TEntity? - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть класс сообщений, который будет иметь полезную нагрузку, которую я хочу определить, используя 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 много Пауло Абоим Пинто

...