C# 访问变量的实例
如果我只有TableAdapter,我需要知道如何获取TableAdapter的所有者实例 例如,有这样一类:C# 访问变量的实例,c#,winforms,postsharp,visual-web-gui,C#,Winforms,Postsharp,Visual Web Gui,如果我只有TableAdapter,我需要知道如何获取TableAdapter的所有者实例 例如,有这样一类: public class example { public User _user; public TableAdapter _adapter; someMethods(); . . . } 我使用面向方面的框架PostSharp。出于日志记录的目的,我有一个日志记录类,其中包含一个在调用get_适配器方法时执行的方法。因此,在我的日志类中,我将
public class example
{
public User _user;
public TableAdapter _adapter;
someMethods();
.
.
.
}
我使用面向方面的框架PostSharp。出于日志记录的目的,我有一个日志记录类,其中包含一个在调用get_适配器方法时执行的方法。因此,在我的日志类中,我将TableAdapter作为参数。我最终需要的是用户对象
不幸的是,我不能改变我需要得到的类的设计中的任何东西,所以我只有这个TableAdapter。我的日志类如下所示:
public class logger
{
public override void OnExit(MethodExecutionArgs args)
{
TableAdapter = (TableAdapter)args.Instance;
//here I need the example object in order to get the current user object
}
}
有没有办法做到这一点?也许是反思?有什么事吗
提前谢谢你的帮助
哦,顺便说一下,我使用C和WinForms。就postsharp而言,如果没有某种类型的中介,例如附加方面或注入tableadapter实例(对其宿主类的引用),您将无法访问它
您可以尝试遍历堆栈,并尝试这样做。因此您也无法更改TableAdapter?不幸的是,不能。我尽量简化我的问题。真正的场景是:在我工作的系统中,容纳用户的示例类是几十个类的基类——所有这些类都使用一个或多个表适配器。所以我得换100多个桌子适配器。@newwguy我不相信你的要求是可能的。我建议,只要您必须去更改所有这些表适配器,就将代码重新考虑到一个适当的分层体系结构中,以便将来可以避免这些问题;您正在寻找拥有的实例,它包含对对象的引用。您在哪里应用于方面、TableAdapter或用户类?get_适配器是访问器方法吗?logger是一个方面还是一个普通的类?遍历堆栈听起来对我来说是可以接受的,我已经在做这个来获取一些其他信息。我已经在获取示例类的类型信息的时候了,但是我不知道如何获取实例。据我从其他线程了解,我已经研究了通过StackFrame的方式,但这不是possible@TheNewGuy可能不是,我把它扔出去了。你最好找个中间人。这需要更多的工作,使事情变得复杂,但我觉得这比在工作堆上走要好。然而,您可能只想重新思考您的方法,以避免太多的复杂性。可能为TableAdapter创建一个适配器类,并要求用它的主机实例实例化它。更干净更简单。