一般的原因,我想這樣做是:是否有可能獲得方法內的調用實例?
class MovieApiController : ApiController
{
public string CurrentUser {get;set;}
// ...
public string Index()
{
return Resources.GetText("Color");
}
}
class Resources
{
static string GetText(string id)
{
var caller = ??? as MovieApiController;
if (caller && caller.CurrentUser == "Bob")
{
return "Red";
}
else
{
return "Blue";
}
}
}
我不需要這是100%可靠。看來這個調用堆棧應該有這個信息,但StackFrame
似乎沒有公開有關每個框架執行的特定對象的任何信息。
你可以在'GetText'中添加一個'object caller'參數。 – juharr
這當然會起作用,但實際上有很多很多地方都會調用'GetText',並且我想在文本來自特定的類時交換文本。 – Rollie
你只需要讓自己進入一種情況,即維護一個巨大的開關或if-else-if構造。這在這裏不是很好用的OO。你應該簡單地在這裏實現一個通用的接口或子類。每個ApiController都可以有自己的GetText實現。或者你可以在每個資源類上使用通用的。或者你可以將類傳遞給GetText方法,如果你真的需要的話,但它看起來並不像你真的在這裏做的那樣。有一種更好的實現方式,不涉及你現在要做的事情。 – ManoDestra