簡體   English   中英

從靜態類調用方法,並通過泛型傳遞動態變量的類型

[英]Call a method from Static Class passing Type of Dynamic variable with Generics

我該如何從傳遞通用類型的動態類型的靜態類中調用方法。 這是我的靜態類:

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

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

我想這樣調用Lo​​gInfo:

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

我的問題是關於如何在通用類型中傳遞myObject類型,因為此對象的類型是動態的。

我想這樣調用Lo​​gInfo:

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");

(只需在LogInfo調用object.GetType )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM