私は単純なクラスを持っています。そして私はにをいくつかの方法とプロパティに条件を追加する必要があります。たとえば:アスペクトの文字列条件をコンパイルする方法
public class Example
{
public Boolean Condition {get; set;}
public Double ConditionValue {get; set;}
[Verify("!Condition && ConditionValue>5")]
public void DoSomthing()
{ ... }
}
私はアスペクト属性に条件(例えば、 "!> 5条件& & ConditionValue")を確認したいです。属性にアクション/関数を与えることができないので、単純な文字列を与えます。この文字列を条件に変換する必要があります。
[Serializable]
public class MyAspectAttribute : OnMethodBoundaryAspect
{
public override void OnExit(MethodExecutionArgs args)
{
if (!this.Condition && this.ConditionValue>5) // If-statment from string, this is the problem...
{ ... }
}
}
文字列から実際のif-statmentをどのように抽出できますか?私はいくつかの解決策を見ていますが、私は彼らが大丈夫かどうかはわかりません:
- ランタイムコンパイラを使用してください。 CSharpCodeProvider。
- などのライブラリを使用するhttp://flee.codeplex.com/
- 他に何か...?
どのように正常に処理できますか?ありがとう!
UPD:私はアドバイスに疑問... UPD2を編集した:
public class Example2
{
public Boolean Condition {get; set;}
[LoggingIf("Condition")]
public void DoSomthing1()
{ ... }
[PrintReportIf("!Condition")]
public void DoSomthing2()
{ ... }
}
この場合カスタム属性はなぜですか? –
私はクラスメンバーにいくつかのロジックを追加しようとします。それは作品ですが、私は良い解決策を探しています...そして、私は、属性を持たない多くの(!)プロパティとメソッドにいくつかのロジックを追加できますか? – xtmq
属性内でコードを呼び出すと、あなたはどのようなコードを呼び出すでしょうか?アトリビュートは、飾るメンバについては何も知らず、アトリビュートを呼び出すものもありません。メタデータはメタデータのみを指定します。 –