0

リフレクションを使用して、実行時にいくつかのクラスをプログラムにロードします。これらのクラスがメイン プログラムと同じロギング クラスを使用できるようにしたいと考えています。

先のことを考えて、これをどのように処理しますか?静的クラスを使用すると機能しますか?

私が望むものにはやり過ぎなので、ロギングフレームワークは使用したくありません。

ありがとう。

4

4 に答える 4

2

本当にロギング フレームワークを使用したくない場合 (これは理解できます)、Singleton パターンを参照することをお勧めします。

using System;

public class Singleton
{
   private static Singleton instance;

   private Singleton() {}

   public static Singleton Instance
   {
      get 
      {
         if (instance == null)
         {
            instance = new Singleton();
         }
         return instance;
      }
   }
}

このクラスは、すべて同じインスタンス.Instanceを共有する属性からのみ作成/アクセス/到達できることに注意してください。

于 2013-01-29T08:43:34.653 に答える
0

log4netを見てください。それはあなたが望むすべてのものを処理します。また、特別な場所にログを記録する必要がある場合は、独自のアペンダーを実装してください。他のロギングフレームワークは、必要な機能を提供します。ロギングを作り直す必要はありません。

log4net

于 2013-01-29T08:40:10.487 に答える
0

シングルトンを使用したい場合は、C# ではより簡潔な方法で実装できることに注意してください。

public class Singletone
{
   public static readonly Singletone Instance = new Singletone();

   private Singletone() {}
   // other methods 
   public void DoTheJob(){}
}

// usage
Singletone.Instance.DoTheJob();

この実装により、遅延初期化 (クラスがアプリ ドメインで初めて使用されるときにのみフィールド初期化子が実行される) やスレッド セーフ (静的初期化子は .NET でスレッド セーフであることが保証されている) などの問題が解決されます。

于 2013-01-29T08:48:41.223 に答える
0

ロガーの実装を ILogger という名前の共通インターフェイスでラップできます。ロードするすべてのクラスは、コンストラクターでインターフェイスを受け入れます。作成時にロガーの実装をそれらに注入できます。また、実行時の読み込みについてですが、MEF について聞いたことがありますか? http://msdn.microsoft.com/en-us/library/dd460648.aspx - その点で役立つ可能性があり、ロードする新しいクラスにロガーの依存関係を自動的に挿入します

クラスによって参照されるシングルトンロガーは、ロガーをコードベースから作成したクラスに緊密に結合するため、良いとは思いません。コンストラクターでの注入とインターフェースは、それらをロガーから疎結合し、より独立してテスト可能にします。

于 2013-01-29T09:23:08.920 に答える