[英]Passing/exposing T on a ServiceStack request filter
我有一個請求屬性,我正在裝飾一些服務,但是由於其中發生了一些邏輯,因此需要將泛型類型傳遞給它。 看起來像這樣:
[SomeAttribute(typeof(MyClass))]
這很好用,但是如果我做一些諸如...
[SomeAttribute<MyClass>]
...我將收到“注釋不能通用”的編譯時錯誤。
在屬性執行邏輯中,我需要執行以下操作:
someClass.doSomething<MyClass>(someString);
所以,我的問題是...
MyClass
為某種形式的T
以便可以那樣使用嗎? T
而不會出現編譯錯誤? 非常感謝!
如錯誤消息所述,.NET注釋不能通用,因此您只能傳入后期綁定的Type
。 從后期綁定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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.