2017-08-28 6 views
0

私は以下のインターセプタを持っています。それは私の現在のユースケースのためにそれを意図したものですが。私は使用された方法が少しハッキーであることを発見し、これを行うためのより良い方法がないのだろうかと思っていました。キャッスルダイナミックプロキシインターセプタで、特定のプロパティに対して呼び出されたかどうかを確認します。

public class Interceptor<TEntity, TProperty> : IInterceptor 
{ 
    private readonly Expression<Func<TEntity, TProperty>> _propertySelector; 

    public Interceptor(Expression<Func<TEntity, TProperty>> propertySelector) 
    { 
     _propertySelector = propertySelector; 
    } 

    public void Intercept(IInvocation invocation) 
    { 
     var invocatedMethod = invocation.Method.Name; 
     var selectedMethod = (_propertySelector.Body as MemberExpression)?.Member.Name; 
     if (invocatedMethod == $"set_{selectedMethod}") 
     { 
      //do stuff... 
     } 
     invocation.Proceed(); 
    } 
} 

私が必要とするのは、指定されたプロパティの変更を傍受することです。

改善予定: - このインターセプタは、すべてのメソッドとプロパティの呼び出しをインターセプトし、特定の状況でのみ処理を行います。それは過剰殺人のように聞こえる。 - 私は似ている2つの弦を比較する必要があります...これは正しい方法ではないようです。

答えて

関連する問題