Невозможно привести синглтон-класс к интерфейсу - PullRequest
0 голосов
/ 09 ноября 2010

У меня есть класс Logger, который реализован синглтоном.Класс прост и содержит несколько методов и одно свойство static, Instance.Как и все одноэлементные классы, я получаю доступ к уникальному экземпляру через свойство Logger.Instance.

Я извлек интерфейс из класса Logger (используя контекстное меню рефакторинга Visual Studio).После извлечения интерфейс содержит подпись для этих нескольких методов, и поскольку свойство Instance равно static, оно не включается в интерфейс ILogger.

После всего этого я не могу разыграть Logger.Instance в ILogger во время выполнения.Что не так с моим подходом?

Ответы [ 2 ]

3 голосов
/ 09 ноября 2010

Вы действительно заявили, что Logger реализует ILogger?

public sealed class Logger : ILogger
{
    ...
}

Если так, то все должно быть в порядке. Пожалуйста, отправьте код, чтобы мы могли попытаться диагностировать проблему.

Если нет, то это проблема, и она легко решается:)

1 голос
/ 09 ноября 2010

Пример, который вы описали, прекрасно работает для меня. Я сделал небольшой пример, может быть, вы видите некоторые различия:

class Program
{
    static void Main(string[] args)
    {
        ILogger logger = Logger.GetLogger();
        logger.LogMessage("Hello");
    }
}

public interface ILogger
{
    void LogMessage(string message);
}

public class Logger : ILogger
{
    private static Logger instance;

    public static Logger GetLogger()
    {
        return instance ?? (instance = new Logger());
    }

    public void LogMessage(string message)
    {
        Console.WriteLine(message);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...