使用Unity时,如何使用任何TEntity解析构造函数的泛型类型?

时间:2018-11-19 00:41:16

标签: c# dependency-injection unity-container

我有一个消息类,该消息类将具有要使用泛型定义的有效载荷

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 <>?

还有其他方法可以创建这种工厂,让我获得正确的消息实例吗?

很多 Paulo Aboim Pinto

0 个答案:

没有答案