簡體   English   中英

在ServiceStack請求篩選器上傳遞/公開T

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM