0

カスタム属性をセットアップして、メソッド呼び出しが処理できるかどうかを判断できるかどうかを調べようとしています。私が望んでいるのは[Authorize()]、MVC3 アプリケーションで使用する属性に似ています。

基本的に、インターフェイスしている COM オブジェクト (サードパーティの DMS ソフトウェア) があり、メソッドの内容を処理する前に、ユーザーがプログラムを閉じていないことを確認したいと考えています。呼び出しを でtry/catchラップすることも、 をチェックするメソッドをラップすることもできますがapplication.running、属性機能と単純なマークアップ (必要な場合) が気に入っています。

これまでに見つけたすべてのチュートリアル/ドキュメントは、プロパティを使用してメソッド/クラスをマークアップし (通常、チュートリアルでは文字列を使用します)、後でコードでそれらの文字列値にアクセスする方法です。


これは、可能であれば私がやりたいことではありません。繰り返しますが、MVC3/4 でできることは...

[Authorize()]
public class ControllerClass : Controller {
   public ActionResult Index(){ return View(); }
   ....etc....
}

この例では、 Index は常に を渡す人によって呼び出される必要がありますAuthorize。クラスのインスタンス化やメソッドの呼び出しにこれが必要かどうかはわかりません。

結局のところ、私の質問は単純です。Authorize()C# WinForms ライブラリに同様のものを実装できますか?

4

1 に答える 1

2

はい、 PostSharpなどのAOPフレームワークを介して実装できます。サンプル:

[Serializable]
public class LogAttribute : OnMethodBoundaryAspect
{
    public override void OnEntry(MethodExecutionArgs args)
    {
        if (!application.running)
            throw new Exception(String.Format("Method {0} is not allowed to call when application is not running.", args.Method.Name));
    }
}
于 2012-10-27T19:00:16.727 に答える