首页 > 解决方案 > 如何动态调用具有泛型类型参数的方法

问题描述

我有这样的代码。

var sampleBus = BusConfigurator.Instance
                .ConfigureBus((cfg, host) =>
                {
                    cfg.ReceiveEndpoint(host, "sampleQueue", e =>
                    {
                        e.UseScheduledRedelivery(r => r.Intervals(TimeSpan.FromMinutes(5));
                        e.UseMessageRetry(r => r.Interval(5, 5000));
                        e.Consumer<ConsumerClass1>();
                    });
                });

sampleBus.Start();

我有很多消费者类,我想用配置文件来处理这个问题。如何将配置文件中的类名转换为消费者类。

foreach(string className in consumerClassNameList){ 

????

var sampleBus = BusConfigurator.Instance
                    .ConfigureBus((cfg, host) =>
                    {
                        cfg.ReceiveEndpoint(host, "sampleQueue", e =>
                        {
                            e.UseScheduledRedelivery(r => r.Intervals(TimeSpan.FromMinutes(5));
                            e.UseMessageRetry(r => r.Interval(5, 5000));
                            e.Consumer<???>();
                        });
                    });

sampleBus.Start();
}

每个 ConsumerClass 派生自:

public class ConsumerClass1<T> : IConsumer<T> where T : class

寻求任何帮助。

编辑

我问错了。这段代码,

e.Consumer<ConsumerClass1>();

不是初始化一个类,而是调用一个方法。

public static void Consumer<TConsumer>(this IReceiveEndpointConfigurator configurator, Action<IConsumerConfigurator<TConsumer>> configure = null) where TConsumer : class, IConsumer, new();

对不起,错误的问题。问题应该是“如何动态调用具有泛型类型参数的方法”。我在这里找到了答案。

标签: c#generics

解决方案


要添加到约翰尼的答案:您可以Type通过以下方式获取对象Type.GetType(string)

> Type.GetType(typeof(int).AssemblyQualifiedName)
[System.Int32]

您应该提供程序集限定名称,可以通过Type对象的相应属性获得。类型应该存在于任何导入的命名空间中。


推荐阅读