一般的原因,我想这样做是:是否有可能获得方法内的调用实例?
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