有一个第三方组件库是这样的:
public static class GenericExcuteTestClassExtension
{
public static void Excute<T>(this GenericExcuteTestClass clazz,
string parameter, Action<ReturnClass<T>> callback)
{
ReturnClass<T> rClazz = new ReturnClass<T>(parameter);
rClazz.Property5 = typeof(T).ToString();
callback.Invoke(rClazz);
}
public static void Excute<T>(this GenericExcuteTestClass clazz,
string parameter, Action<ReturnClass> callback)
{
ReturnClass rClazz = new ReturnClass(parameter);
rClazz.Property5 = typeof(T).ToString();
callback.Invoke(rClazz);
}
}
我想反映调用该方法Excute<T>(this GenericExcuteTestClass clazz, string parameter, Action<ReturnClass<T>> callback)
。
我使用
typeof(GenericExcuteTestClassExtension).GetMethod("Excute", new Type[] { typeof(GenericExcuteTestClass), typeof(string), typeof(Action<ReturnClass<>>)})
,但编译器收到错误“预期类型”。我怎样才能得到类型(Action<ReturnClass<>>)
,Action<>
可以编译,但这不是我的预期。我想将自定义
action<ReturnClass<>>
的方法传递(result)=>{....}
给方法,我该怎么做?
请帮忙,谢谢。
为什么我使用反射来执行这个?
因为这个方法必须在aop拦截中执行
这个真实的情况是这样的:
我想在我的应用程序中使用restsharp,我写了一个类似的界面
[RestfulService(Constants.BASE_URL + "/login")]
public interface UserService
{
[Request("/login")]
void Login([Paramter] string name, [Paramter] string password, Action<T> callBack);
}
并截取接口获取参数执行restsharpExecuteAsync<T>(this IRestClient client, IRestRequest request, Action<IRestResponse<T>> callback)
获取数据。
所以我需要将T
in UserService 传递给ExecuteAsync<T>
in Intercept 方法public void Intercept(IInvocation invocation) of castle.windsor
,在这个方法体中,我们只能得到 GenericType 的 Type 不能得到 T,所以如果我直接调用ExecuteAsync
,我无法将 GenericType T 传递给这个方法。我必须这样使用:...GetMethod("...").MakeGenericType(new Type[]{piLast.ParameterType.GenericTypeArguments})