2011-07-02 8 views
3

PostSharpの新機能---私は今NuGetバージョンを試していますが、agrs.Instance値がnullであるAuthoriseAttribute OnEntryメソッドでwnyを理解しようとしています。私はオブジェクトの値に依存する著者を実装しようとしています。アーカイブされた顧客は、与信限度額を引き上げることはできません。ルールに固有の他のクラス内でルールを実装しています。ポストシャープ初心者 - なぜ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

[シリアライズ可能]悲しいことではありません。私はコードについて悩んでいて、パブリッククラスAuthorizeActivityAttribute:OnMethodBoundaryAspectを残しました 編集済みコード... – ScottReynolds

+1

私の答えが更新されました。これは、PostSharpが特定のプロパティを使用しているかどうかを確認することによって使用する最適化です。もしそうでなければ、それらを初期化するのは気にしない。 –

+0

Hrm。私の場合、私はそれを使用しています - それは時間の非NULLのMOSTですが、NULLのいくつかの時間... WTF? –