Совместное использование класса журнала в моей программе

Я собираюсь использовать рефлексию для загрузки некоторых классов в свою программу во время выполнения. Я хочу, чтобы эти классы могли использовать тот же класс ведения журнала, что и основная программа.

Думаю, как бы я справился с этим? Будет ли использоваться статический класс?

Я бы предпочел не использовать фреймворк регистрации, поскольку это слишком много для того, что я хотел бы.

Благодарю.

0
nl ja de
Я действительно думаю, что Trace class может пригодиться.
добавлено автор Uwe Keim, источник
Я не вижу, что «переполняет» использование очень легкой и простой в использовании инфраструктуры, такой как log4net, что позволит вам установить примерно что примерно за 5 минут.
добавлено автор Ant P, источник
Статический класс, безусловно, будет работать до тех пор, пока вы не будете многопоточными или не будете иметь многопоточный код. Обратите внимание, что для использования вашего пользовательского регистратора в динамически загружаемых частях вам потребуется ссылка на ваш пользовательский класс или интерфейс ведения журнала (с точки зрения метаданных), поэтому на практике все ваши динамические DLL должны будут ссылаться на ваш основной модуль с помощью logger class/interface. Может быть, использование фреймворка не является избыточным.
добавлено автор Andrew Savinykh, источник

4 ответы

Если вы действительно не хотите использовать фреймворк регистрации (который может быть понятным), вы можете посмотреть на шаблон 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 , который разделяет экземпляр тот же .

2
добавлено

Если вы хотите пойти с заметкой singleton, то в C# она может быть реализована менее подробным образом:

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

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

// usage
Singletone.Instance.DoTheJob();

Эта реализация решает такие проблемы, как ленивая инициализация (инициализаторы полей выполняются только тогда, когда класс используется в первый раз в домене приложения), а также безопасность потоков (статические инициализаторы гарантируют безопасность потоков в .NET).

0
добавлено

Посмотрите на log4net. Это будет обрабатывать все, что вы хотите. И если вам нужно зарегистрироваться где-то особенным, внесите свой собственный appender, чтобы сделать это. Другие рамки ведения журналов предоставят необходимые вам функции. Нет необходимости изобретать журналы.

log4net

0
добавлено

Вы можете объединить реализацию логина с помощью общего интерфейса с именем ILogger - все классы, которые вы загрузите, будут принимать интерфейс в их конструкторе, и вы можете внедрить в них свою реализацию регистратора при их создании. Также - о загрузке во время выполнения - вы слышали о MEF? http://msdn.microsoft.com/en-us/library/dd460648.aspx - он может помочь вам в этом отношении и автоматически введет зависимость регистратора в новые классы, которые вы загружаете

I don't think a singleton logger referenced by the classes is good since it will tightly couple the logger from your codebase to the classes you make. injecting and interface in the constructor will loosely couple them from the logger,and make them more independent & testable.

0
добавлено
Microsoft Stack Jobs
Microsoft Stack Jobs
1 788 участник(ов)

Work & freelance only Microsoft Stack. Feed https://t.me/Microsoftstackjobsfeed Чат про F#: @Fsharp_chat Чат про C#: @CSharpChat Чат про Xamarin: @xamarin_russia Чат общения:@dotnettalks

Microsoft Developer Community Chat
Microsoft Developer Community Chat
584 участник(ов)

Чат для разработчиков и системных администраторов Microsoft Developer Community. __________ Новостной канал: @msdevru __________ Баним за: оскорбления, мат, рекламу, флуд, флейм, спам, NSFW контент, а также большое количество оффтоп тем. @banofbot