2012-05-07 4 views
1

의 소유 인스턴스를 얻는 방법을 알고 싶습니다. Table Adapter 만 있으면됩니다.변수의 인스턴스로 인해 액세스

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

    someMethods(); 
    . 
    . 
    . 
} 

나는 aspect 지향 프레임 워크 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에 관한 한, 추가 측면 또는 테이블 어댑터 인스턴스에 삽입하는 것과 같은 중간 유형이 없으면 호스트 클래스에 대한 참조로 연결될 수 없습니다.

스택을 걸어서 그렇게 할 수 있습니다.

+0

스택 사운드를 나에게 받아 들일 수있게 해주세요, 나는 어쨌든 다른 정보를 얻기 위해 이것을하고 있습니다. 이미 예제 클래스의 형식 정보도 얻었지만 이미 인스턴스를 가져 오는 방법을 알지 못합니다.내가 아는 한 다른 스레드 (StackFrame을 통해 이미 조사했다)는 불가능합니다. – TheNewGuy

+0

@ TheNewGuy 그렇지 않을 수도 있습니다. 중개자에게 더 나을 수도 있습니다. 그것은 더 많은 일을하고 복잡한 일을하지만 IMO는 스택을 걷는 것보다 낫습니다. 그러나 복잡하지 않게 접근 방식을 재고하고 싶을 수도 있습니다. 어쩌면 TableAdapter에 대한 어댑터 클래스를 만들고이 인스턴스를 호스트 인스턴스로 인스턴스화해야합니다. 더 깔끔하고 간단합니다. –