在 ServiceStack 请求筛选器上传递/公开 T



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

[SomeAttribute(typeof(MyClass))]

这很好用,但是如果我做一些事情,例如...

[SomeAttribute<MyClass>]

。我会得到一个"注释不能是通用的"编译时错误。

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

someClass.doSomething<MyClass>(someString);

所以,我的问题是...

  • 我可以将MyClass转换为某种形式的T以便以这种方式使用它吗?
  • 有没有另一种方法可以在属性中传递T而不会收到编译错误?

非常感谢!

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

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

然后你可以缓存并调用泛型方法的编译委托,该方法接受string并返回一个object,例如:

object response = doSomethingFn(someString);

最新更新