C# Проблема области действия статического метода

У меня проблема с вызовом статического метода в статическом классе. Я хотел бы иметь очень простую оболочку журнала с использованием NLog, где я вызываю Log.warn и т. Д.:

using NLog;
using NLog.Config;
using NLog.Targets;

namespace Test.Logger
{
  public static class Log
  {
    private static readonly ILogger logger = LogManager.GetCurrentClassLogger();

    static Log()
    {
        logger = LogManager.GetCurrentClassLogger();
    }


    public static void Debug(string message)
    {
        logger.Log(LogLevel.Debug, message);
    }

  }

}

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

Вот как я пытаюсь вызвать метод:

using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
using Test.Logger;

namespace WpfTestApp
{
    /// <summary>
    /// Interaction logic for App.xaml
    /// </summary>
    public partial class App : Application
    {
        Test.Logger.Log.Debug("test message");
        //this method cannot be found, however Test.Logger.Log can
    }
}

1 ответ

Решение

Вы, кажется, звоните Log.Debug Метод в определении класса. Что (что интересно для меня в любом случае) не работает, вам нужно переместить его в метод класса:

class Program
{
    //doesn't work
    Log.Debug("");



    static void Main(string[] args)
    {
        //works
        Log.Debug("Hello World!");
    }
}

Надеюсь это поможет

Другие вопросы по тегам