2012-05-07 3 views
1

Мне нужно знать, как получить экземпляр владельца TableAdapter, если у меня есть только Table Adapter.Доступ к экземпляру переменной

Так, например, есть этот класс:

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

К сожалению, нет. Я попытался максимально упростить мой вопрос. Реальный сценарий: в системе я работаю, класс класса, который содержит пользователя, является базовым классом из нескольких десятков классов - все эти классы используют один или несколько табличных адаптеров. Поэтому мне пришлось бы менять более 100 адаптеров стола. – TheNewGuy

+1

@ TheNewGuy Я не верю, что ваше задание возможно. Я бы предложил, пока вы должны пойти и изменить все эти адаптеры таблицы, перефразируйте код в правильную многоуровневую архитектуру, чтобы вы могли избежать этих проблем в будущем. – asawyer

ответ

0

Что касается postsharp, то вы не сможете добраться до него без какого-либо посредника, такого как дополнительный аспект или впрыск в экземпляр tableadapter, ссылку на его класс-хозяин.

Вы можете попытаться пройти стек и попытаться получить его таким образом.

+0

Прогулка со звуками стека, приемлемыми для меня, я все равно делаю это, чтобы получить другую информацию. Я уже в точке, где я получаю информацию о типе моего класса класса, но я не знаю, как получить экземпляр.Насколько я знаю из других потоков (я уже исследовал путь через StackFrame), это невозможно – TheNewGuy

+0

@ TheNewGuy Возможно, это не так, я выбрасывал его. Возможно, вам будет лучше с посредником. Это больше работает и усложняет работу, но IMO лучше, чем ходить в стеке. Однако вы можете просто пересмотреть свой подход, чтобы не иметь такой сложности. Возможно, создайте класс адаптера для TableAdapter и попросите его создать экземпляр с экземпляром его узла. Чище и проще. –

Смежные вопросы