2014-11-12 2 views
1
[PostSharp.Aspects.Advices.OnInstanceConstructedAdvice] 
    public void OnInstanceConstructed() 
    { 
     var instanceType = this.Instance.GetType(); 

     if (this.appliedTo != instanceType) 
     { 

      var LoadInDbMethod = instanceType.GetMethod("GetObjectInDatabase", System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Instance); 
      var objInDb = LoadInDbMethod.Invoke(this.Instance, new object[] { null, true }); 
      if (objInDb != null) 
      { 
       this.Instance = objInDb; 
       //postshot throws an error that this is readonly!! 
      } 

     } 

    } 

인스턴스가 생성되면 PostSharp에서 인스턴스를 변경할 수 없지만 인스턴스를 생성 한 후에이 인스턴스에 다른 객체를 할당해야합니다.OnInstanceConstructedAdvice에서 인스턴스를 변경하는 방법은 무엇입니까?

한다고 가정 내가

var Pejo = new Car(){ Name = "405"}; 

Pejo (405)는 모두 내 데이터베이스에 존재하는 코드를 다음 한 것은 속성 그래서 Pejo 내 데이터베이스 객체가 아닌 (이름이 아닌) 널 (null) 특성을 가진 새로운 객체되고 싶어합니다.

PostSharp에서 다른 C# AOP 프레임 워크로 이동할 수도 있습니다.

PostSharp 또는 다른 AOP 프레임 워크에서이를 수행하는 방법은 무엇입니까?

+0

달성하려는 목표는 무엇입니까? 결국 전체면에서 무엇을해야합니까? –

+0

일단 인스턴스가 생성되면 데이터베이스가 내 개체가 데이터베이스에 존재하는지 확인하고 데이터베이스에서 발견되면 데이터베이스 개체를 생성 된 인스턴스에 할당하려고합니다. 이 코드가 있다고 가정하면'var Pejo = new Car() { "Pejo 405"};'이 객체는 데이터베이스에 존재하므로'Pejo'를 내 데이터베이스 객체로 만들고 싶습니다. 내가 무슨 뜻인지 알지 못한다면 좀 더 C# 코드로 설명 할 수 있을까요? –

+0

@GaelFraiteur 질문에 대한 추가 정보가 있습니다. 그래도 내가 너 무슨 뜻인지 알지 못하면 알려줘. –

답변

0

현재 버전의 PostSharp (작성 당시 4.0)에서는이 작업을 수행 할 수 없습니다. 실제로 호출을 가로 챌 필요가 있는데, 현재 지원되지 않는 생성자입니다.

해결 방법은 이제 공장 메서드를 사용하여 거기에 논리를 구현하는 것입니다.

+0

PostSharp 개발자가이 기능을 추가하기 위해 노력하고 있다고 말할 수 있습니까? 이 버전이 4.1 또는 더 빨리 추가 될 예정이라면 몇 주 동안 프로젝트를 진행할 수 있습니까? –

+0

기능이 현재 계획되지 않았습니다. –

+0

이와 비슷한 해결책을 제시해 주시겠습니까? 어쩌면 모든 호출을 생성자에 후킹하는 간접적 인 방법일까요? 현재 기능으로 이것을 달성 할 수있는 방법이 있어야합니다! –