我有这样的代码。
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。
答案 0 :(得分:0)
要添加到约翰尼的答案中:您可以通过Type
获取Type.GetType(string)
对象:
> Type.GetType(typeof(int).AssemblyQualifiedName)
[System.Int32]
您应提供程序集限定名称,该名称可以通过Type
对象的相应属性获得。类型应存在于任何导入的名称空间中。