如何传递对象类型以调用泛型方法

Dil*_*mar 1 c# generics

我的通用方法是这样的

public static class AppContainerInstaller
{
    public static IMessageHandler<T> Resolve<T>() 
    {
        return _container.Resolve<IMessageHandler<T>>();
    }
}
Run Code Online (Sandbox Code Playgroud)

我试图从另一个类调用这个泛型方法

public static string ProcessMessage(IMessage message)
{
    messageHandler = AppContainerInstaller.Resolve<message.GetType()>();
    // THe previous line throws an error.
    return messageHandler.Handle(message);
}
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何将消息类型传递给泛型方法?

Adr*_*iro 5

你必须这样做:

messageHandler = AppContainerInstaller.Resolve<IMessage>();
Run Code Online (Sandbox Code Playgroud)

Resolve方法是应该在T中传递类型的人.你看,当使用泛型时,你必须提供一个实际的类型.你可能想要改变Resolve得到一个T参数,所以你可以通过message.像这样的东西:

public static IMessageHandler<T> Resolve<T>(T param) 
Run Code Online (Sandbox Code Playgroud)

你这样称呼它:

messageHandler = AppContainerInstaller.Resolve<IMessage>(message);
Run Code Online (Sandbox Code Playgroud)