Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 访问变量的实例_C#_Winforms_Postsharp_Visual Web Gui - Fatal编程技术网

C# 访问变量的实例

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_适配器方法时执行的方法。因此,在我的日志类中,我将

如果我只有TableAdapter,我需要知道如何获取TableAdapter的所有者实例

例如,有这样一类:

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创建一个适配器类,并要求用它的主机实例实例化它。更干净更简单。