2011-07-02 6 views
3

PostSharp에 처음 오신 것을 환영합니다. - 지금 NuGet 버전을 시험하고 있으며, agrs.Instance 값이 null 인 AuthoriseAttribute OnEntry 메소드에서 wny를 이해하려고합니다. 예를 들어 객체의 값에 의존하는 저작물을 구현하려고합니다. 보관 처리 된 고객의 크레딧 한도를 높일 수 없습니다. 규칙과 관련된 다른 클래스 내에서 규칙을 구현하고 있습니다.Postsharp Newbie - 왜 args.Instance null입니까?

public class Program 
{ 
    static void Main(string[] args) 
    { 
     var c = new Customer(); 
     c.RaiseCreditLimit(100000); 
     c.Error(00); 
    } 
} 

public class Customer 
{ 
    [AuthorizeActivity] 
    public void RaiseCreditLimit(int newValue) 
    { 
    } 

    [AuthorizeActivity] 
    public void Error(int newValue) 
    { 

    } 
} 

[Serializable] 
public class AuthorizeActivityAttribute : OnMethodBoundaryAspect 
{ 
    public override void OnEntry(MethodExecutionArgs args) 
    { 
     // 
     //Why is args.Instance null??????????? 
     // 
     if (args.Method.Name == "RaiseCreditLimit") 
     { 
      Debug.WriteLine(args.Method.Name + " started"); 
     } 
     else 
     { 
      throw new Exception("Crap"); 
     } 
    } 

    public override void OnExit(MethodExecutionArgs args) 
    { 
     Debug.WriteLine(args.Method.Name + " finished"); 
    } 
} 
+0

이 알아 낸 당신이나요 코드를 최적화 할 않는 그 밖의 무엇을보고이 문서를 체크 아웃? –

답변

6

답변은 귀하의 측면에서 사용하지 않았기 때문입니다. 그것은 최적화입니다. 당신이 측면에서 그것을 사용한다면 그것은 설정 될 것입니다. 인스턴스를 사용하기 위해 애스펙트를 변경하면 거기에있게됩니다. 더 많은 정보를 들어

public override void OnEntry(MethodExecutionArgs args) 
     { 
      // 
      //Why is args.Instance null??????????? 
      // 
      if (args.Method.Name == "RaiseCreditLimit") 
      { 
       Debug.WriteLine(args.Instance.GetType().Name); 
       Debug.WriteLine(args.Method.Name + " started"); 
      } 
      else 
      { 
       throw new Exception("Crap"); 
      } 
     } 

PostSharp가 http://programmersunlimited.wordpress.com/2011/03/23/postsharp-weaving-community-vs-professional-reasons-to-get-a-professional-license/

+0

[Serializable] 아니, 그럴 수 없다. 내가 코드에 대해 mucking 및 위치 경계를 남겼습니다. public class AuthorizeActivityAttribute : OnMethodBoundaryAspect 편집 된 코드 위 ........... – ScottReynolds

+1

내 대답이 업데이트되었습니다. PostSharp가 특정 속성을 사용하고 있는지 확인하여 사용하는 최적화입니다. 그렇지 않은 경우에는 초기화가 필요 없습니다. –

+0

Hrm. 내 경우에는, 나는 그것을 사용하고있다 - 그리고 그것은 무효 시간의 대부분이지만, 시간의 일부 null ... WTF? –

관련 문제