2009-08-14 7 views
2

は、これは私がするつもりです:PostsharpとNLog、一般的な設計問題

  1. 私はNLog特定onmethodexecutionaspectクラスアスペクト指向を書きたいです。
  2. しかし、私は依然としてアプリケーションコードで指定されているものに依存して、NexまたはTraceXなどの特定の実装をmethodexecutionaspectに内部的にロードする一般的な属性クラスを使用して、呼び出しコードを帰属させます。

このアプローチにはどのような方法が最適ですか?

私は、ポストシャープメソッド実行の側面から派生する抽象クラスを書くことを考えています。 次に、NLog固有の実装を持つ別のdllを持っているので、一般的なdllで作成した一般的なメソッド実行アスペクトクラスから派生するクラスを作成します。

消費コードは、私が書いた一般的なクラスdllのみを参照し、そのクラスは、アプリケーション設定で指定されているものなら、NLog固有のdllのロードを行います。

は意味がありますか?

答えて

3

あなたは正しい軌道にいると思います。 ただし、代わりにOnMethodBoundaryAspectを使用してみてください。実行時にOnMethodInvocationAspectより高速です。

コンパイル時の初期化(CompileTimeInitialize)と実行時初期化(RunTimeInitialize)を利用し、ハンドラでは何も処理しないようにしてください。

幸運。

-ゲール

+0

ありがとうございました。私が心に留めているアプローチについて少しだけ助けが必要です...あなたはどこにコードを入れて、特定のものをロードするべきだと思いますか?それは一般クラス(OnMethodBoundaryAspectからのderab)の静的コンストラクタにありますか。 OnMethodBoundaryAspectから派生したクラスへのすべての呼び出しでNlogの内容が読み込まれないようにしたいので、これを尋ねます。 –

+1

静的コンストラクタは使用できますが、PostSharpが実行されているときは、ロギングフレームワークを初期化しないでください(PostSharpEnvironment.IsPostSharpRunningを参照)。 アスペクトターゲットのメタデータ(クラス名、メソッド名)に依存するものを初期化する場合は、RuntimeInitializeを使用します。たとえば、ターゲット・タイプの名前であるトレース・カテゴリを初期化する必要がある場合、RuntimeInitializeは正しい場所です。 -gael –

+0

Thnx。私はそのAPIを参照して、さらに明確にするためにあなたに戻ってきます。 –

関連する問題