c# - 如何动态调用具有泛型类型参数的方法
问题描述
我有这样的代码。
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();
对不起,错误的问题。问题应该是“如何动态调用具有泛型类型参数的方法”。我在这里找到了答案。
解决方案
要添加到约翰尼的答案:您可以Type
通过以下方式获取对象Type.GetType(string)
:
> Type.GetType(typeof(int).AssemblyQualifiedName)
[System.Int32]
您应该提供程序集限定名称,可以通过Type
对象的相应属性获得。类型应该存在于任何导入的命名空间中。
推荐阅读
- php - 如何使用“n Y”格式创建 DateTime 并使用 DateTime::createFromFormat 控制错误日期
- ios - 根据标签文本自定义 UICollectionViewCell 自身大小
- java - 我可以将 Jmeter 添加到使用 Gradle Java 和 Junit 5 的项目中吗?
- http - 在 Spring WebFlux 应用程序中获取 HTTP POST 参数顺序
- android - 找不到名称为“调试”的 KotlinJvmAndroidCompilation
- python - 使用 stargazer 从 linearmodels 模型拟合输出 Latex 代码
- c# - GetComponent 不起作用,没有错误,没有崩溃
- c - 无法从 sk_buff 获取数据(有效负载)
- google-chrome - GPO 登录脚本打开 Intranet 页面,但当 Chrome 是默认浏览器时,不允许超链接打开新选项卡\窗口
- vb.net - 条件为假时,带有 IIF 表达式的 SSRS 计算字段给出 #error