尝试使用 Watson SDK for Unity 时如何修复此错误?

How do I fix this error when trying to use the Watson SDK for Unity?

感谢您查看此内容。我是 Unity 的新手,正在努力了解如何修复此错误。

Assets/Watson/Scripts/Logging/Logger.cs(115,53):错误 CS0311:类型 IBM.Watson.DeveloperCloud.Logging.LogSystem' 不能用作泛型类型或方法 Singleton 中的类型参数 T。没有从 IBM.Watson.DeveloperCloud.Logging.LogSystem' 到 `UnityEngine.MonoBehaviour

的隐式引用转换

这是导致错误的行:

public static LogSystem Instance { get { return Singleton<LogSystem>.Instance; } }

上下文是这样的:

 /// <summary>
  /// This singleton class maintains the of list of installed reactors and handles all LogRecord 
  /// objects. See the static class Log for functions the end user of this system should actually
  /// be calling. This class is thread safe.
  /// </summary>
  public class LogSystem
  {
    #region Public Properties
    /// <summary>
    /// Returns the singleton instance of the Logger object.
    /// </summary>
    **public static LogSystem Instance { get { return Singleton<LogSystem>.Instance; } }**
    #endregion

    #region Private Data
    private static bool sm_bInstalledDefaultReactors = false;
    List<ILogReactor> m_Reactors = new List<ILogReactor>();
    #endregion

    #region Public Functions
    public static List<ILogReactor> ReactorsInstalled
    {
      get
      {
        return LogSystem.Instance.m_Reactors;
      }
    }

    /// <summary>
    /// Install a default debug and file reactor.
    /// </summary>
    public static void InstallDefaultReactors(int logHistory = 2, LogLevel logLevelFileReactor = LogLevel.STATUS)
    {
      if (!sm_bInstalledDefaultReactors)
      {
        // install the default reactors...
        sm_bInstalledDefaultReactors = true;
#if UNITY_EDITOR || UNITY_IOS || UNITY_ANDROID
        LogSystem.Instance.InstallReactor(new DebugReactor());
#endif

        if (!string.IsNullOrEmpty(Constants.Path.LOG_FOLDER) && !System.IO.Directory.Exists(Application.persistentDataPath + Constants.Path.LOG_FOLDER))
          System.IO.Directory.CreateDirectory(Application.persistentDataPath + Constants.Path.LOG_FOLDER);

        LogSystem.Instance.InstallReactor(new FileReactor(Application.persistentDataPath + Constants.Path.LOG_FOLDER + "/" + Application.productName + ".log", logLevelFileReactor, logHistory));

        Application.logMessageReceived += UnityLogCallback;
      }
    }

    static void UnityLogCallback(string condition, string stacktrace, LogType type)
    {
      if (type == LogType.Exception)
        Log.Critical("Unity", "Unity Exception {0} : {1}", condition, stacktrace);
    }

    /// <summary>
    /// Installs a reactor into this Logger.
    /// </summary>
    /// <param name="reactor">The reactor object.</param>
    public void InstallReactor(ILogReactor reactor)
    {
      lock (m_Reactors)
      {
        m_Reactors.Add(reactor);
      }
      // set our default reactor flag to true if the user installs their own reactors.
      sm_bInstalledDefaultReactors = true;
    }

    /// <summary>
    /// Removes a reactor from this Logger.
    /// </summary>
    /// <param name="reactor">The reactor to remove.</param>
    /// <returns>Returns true on success.</returns>
    public bool RemoveReactor(ILogReactor reactor)
    {
      lock (m_Reactors)
      {
        return m_Reactors.Remove(reactor);
      }
    }

    /// <summary>
    /// Send the given LogRecord to all installed reactors.
    /// </summary>
    /// <param name="log">The LogRecord to pass to all reactors.</param>
    public void ProcessLog(LogRecord log)
    {
      lock (m_Reactors)
      {
        foreach (var reactor in m_Reactors)
          reactor.ProcessLog(log);
      }
    }
    #endregion
  }
public static LogSystem Instance 
{ 
     get 
     { 
          return instance; 
     } 
}
private static LogSystem instance;
// Ctor of the class
public LogSystem()
{ 
    if(instance == null) { instance = this;}
}

这是一个非常基本的单例模式实现。你可以在网上找到更高级的。