Вызов метода из статического класса, передавая тип динамической переменной с помощью Generics - PullRequest
2 голосов
/ 17 июня 2011

Как я могу вызвать метод из статического класса, передавая тип динамического в общем. Вот мой статический класс:

public static class Log<T>
{
    private readonly static ILog Logger = LogManager.GetLogger(typeof(T));

    public static void LogInfo(string message)
    {
        Logger.Info(message);
    }
}

Я хочу вызвать LogInfo следующим образом:

Log<myObject.GetType()>.LogInfo("Some String");

У меня вопрос о том, как передать тип myObject в Generic, поскольку тип этого объекта является динамическим.

1 Ответ

4 голосов
/ 17 июня 2011

Я хочу вызвать LogInfo следующим образом:

Log<myObject.GetType()>.LogInfo("Some String");

Почему?Почему бы вам просто не сделать это:

public static class Log {
     private static readonly Dictionary<Type, ILog> loggers =
         new Dictionary<Type, ILog>();

     public static void LogInfo(Type type, string message) {
          var logger = Log.GetLoggerForType(type);
          logger.Info(message);
     }

     public static void LogInfo<T>(string message) {
          LogInfo(typeof(T), message);
     }

     private static ILog GetLoggerForType(Type type) {
          ILog logger;
          if(!loggers.TryGetValue(type, out logger)) {
               logger = LogManager.GetLogger(type);
               loggers.Add(type, logger);
          }
          return logger;
     }
}

Обратите внимание, что это не, НЕ, НЕ потокобезопасно.Я хотел донести эту идею.

Затем:

Log<myObject.GetType()>.LogInfo("Some String");

можно заменить на

Log.LogInfo(myObject.GetType(), "Some String");

или вы можете даже сделать еще один шаг и добавить перегрузку, котораяпозволяет вам сказать

Log.LogInfo(myObject, "Some String");

(просто позвоните object.GetType в LogInfo).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...