处理GetMethod中的泛型类型



在定义泛型版本的AddService(services, type, instance)中,GetMethod的正确参数是什么(以防出现更多的重载)

我知道我可以保持方法名不同,但我不想。

目前我得到null或异常,由于多个找到的方法版本…

代码:

namespace Sample
{
public interface IService { }
public static class SampleExtensions
{
public static IServiceCollection AddService<T>(this IServiceCollection services, T instance) where T : IService
{
//services.AddSingleton<T>(instance);
services.AddSingleton(instance.GetType(), instance); // register with the concrete implementation type
//some stuff that only works with generic T
return services;
}
public static IServiceCollection AddService(this IServiceCollection services, Type type, object instance)
{
Type classType = typeof(SampleExtensions);
MethodInfo methodInfo = classType.GetMethod                         // correct arguments??
(
nameof(AddService),                                             // only name would bring 2 results
new Type[] { typeof(IServiceCollection), typeof(object) }       // ??? instance is generic
);
MethodInfo genericMethod = methodInfo.MakeGenericMethod(type);
genericMethod.Invoke(null, new[] { services, instance });           // call the generic method version
return services;
}
}
}

您可以使用Type.MakeGenericMethodParameter来表示通用参数引用:

MethodInfo methodInfo = classType.GetMethod                         
(
nameof(AddService),                                             
new Type[] { typeof(IServiceCollection), Type.MakeGenericMethodParameter(0) }      
);

相关内容

  • 没有找到相关文章

最新更新