c# - 在 ServiceStack 请求过滤器上传递/公开 T

标签 c# generics annotations servicestack action-filter

我有一个请求属性,我正在装饰一些服务,但由于其中发生了一些逻辑,我需要将泛型类型传递给它。看起来像这样:

[SomeAttribute(typeof(MyClass))]

这很有效,但如果我做一些事情,例如......

[SomeAttribute<MyClass>]

...我会收到“注释不能通用”编译时错误。

在我的属性执行逻辑中,我需要执行以下操作:

someClass.doSomething<MyClass>(someString);

所以,我的问题是......

  • 我可以将 MyClass 转换为某种形式的 T 以便我可以这样使用它吗?
  • 是否有其他方法可以在属性中传递 T 而不会出现编译错误?

非常感谢!

最佳答案

正如错误消息所示,.NET 注释不能是通用的,因此您只能传入后期绑定(bind)的 Type。从后期绑定(bind)类型调用泛型方法的唯一方法是使用反射,例如:

var mi = typeof(MyClass).GetMethod("doSomething");
var genericMi = mi.MakeGenericMethod(typeof(MyAttributeType));
var doSomethingFn = (Func<string, object>) genericMi.CreateDelegate(
  typeof(Func<string, object>));

然后您可以缓存并调用通用方法的已编译委托(delegate),该方法采用字符串并返回对象,例如:

object response = doSomethingFn(someString);

关于c# - 在 ServiceStack 请求过滤器上传递/公开 T,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36815174/

相关文章:

c# - 我的 C++ 项目需要一个 GUI

c# - 字符串参数未正确编码到 C++ DLL

java - 将集合中的泛型类型与同一类型 java 进行比较

opencv - 训练级联分类器,同时将图像注释也作为特征包含在内

java - 为什么@NotNull 注释不删除警告?

java - 将 @Generated 注释添加到 JAXB 生成的类

c# - 递归地使用泛型反射

c# - Entity Framework :多对多排序

java - 如何从 Apache Commons Collections 创建新的 MultiValueMap?

c++ - 如何在 C++ 中创建通用 HashMap ?