如何动态调用带有泛型类型参数的方法

时间:2019-04-08 07:15:13

标签: c# generics

我有这样的代码。

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();

我有很多使用者类,我想用配置文件来处理。如何将配置文件中的类名转换为ConsumerClasses。

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();

很抱歉输入错误的问题。问题应该是“如何动态调用具有泛型类型参数的方法”。我找到了答案here

1 个答案:

答案 0 :(得分:0)

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

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

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