2012-05-07 20 views
1

私はTable Adapterがあれば、TableAdapterの所有インスタンスを取得する方法を知る必要があります。変数のインスタンスにアクセスする

ので、例えば、このクラスがあります:

public class example 
{ 
    public User _user; 
    public TableAdapter _adapter; 

    someMethods(); 
    . 
    . 
    . 
} 

私はアスペクト指向フレームワークPostSharpで動作します。ロギング目的のために、私はget_Adapterメソッドが呼び出されたときに実行されるメソッドを持つロギングクラスを持っています。だから、私のログクラスでは、私は引数としてTableAdapterを取得します。私が最後に必要とするのは、Userオブジェクトです。

残念ながら、私は取得する必要があるクラスのデザインで何も変更できないので、私が持っているのは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で作業しています。

+0

また、あなたは 'TableAdapter'も変更できませんか? – Marnix

+0

残念ながら。私は可能な限り私の質問を簡素化しようとしました。実際のシナリオは次のとおりです。私が動作するシステムでは、ユーザーを保持するサンプルクラスは数十のクラスの基本クラスです。これらのクラスはすべて1つ以上のテーブルアダプタを使用します。だから私は100以上のテーブルアダプタを変更する必要があります。 – TheNewGuy

+1

@ TheNewGuy私はあなたの質問が可能であるとは思わない。これらのテーブルアダプタをすべて変更して、コードを適切な階層構造のアーキテクチャに戻して、将来これらの問題を回避できるようにしなければならない限り、私はお勧めします。 – asawyer

答えて

0

postsharpのところでは、追加のアスペクトやtableadapterインスタンスへの注入など、何らかの仲介がなければ、それを取得することはできません。これは、ホストクラスへの参照です。

スタックを歩いてそのようにしてみることができます。

+0

スタックサウンドを私に受け入れてもらうために、私はすでに他の情報を得るためにこれをやっています。私はすでに私のクラスの型情報も取得していますが、インスタンスを取得する方法はわかりません。限り、私は他のスレッドから知っている(私は既にStackFrame経由で方法を調べた)これは不可能です – TheNewGuy

+0

@ TheNewGuyそれはないかもしれない、私はそこに投げていた。あなたは仲介業者と一緒にいる方が良いかもしれません。それはより多くの仕事であり、物事は複雑になりますが、IMOはスタックを歩くよりも優れています。しかし、あまり複雑でないようにアプローチを再考したいかもしれません。おそらく、TableAdapterのアダプタクラスを作成し、それをそのホストのインスタンスでインスタンス化する必要があります。よりクリーンでシンプル。 –

関連する問題