Безопасность потока метода экземпляра без сохранения состояния Синглтона (C #) - PullRequest
2 голосов
/ 30 января 2010

Безопасно ли делать конвертер синглтоном?

public interface IConverter<TFoo, TBar>
    where TFoo : class, new()
    where TBar : class, new()
{
    TFoo ToFoo(TBar q);
    TBar ToBar(TFoo q);
}

public class Converter : IConverter<Foo, Bar>
{
    public Foo ToFoo(Bar b) {return new Foo(b);}
    public Bar ToBar(Foo f) {return new Bar(f);}
}

Ответы [ 3 ]

2 голосов
/ 30 января 2010

Да, реализация не делает ничего, что зависит от состояния.

2 голосов
/ 30 января 2010

Да, это совершенно нормально. Нет состояния, поэтому нет проблем с безопасностью потоков - и нет причины иметь несколько экземпляров. Это довольно естественный синглтон.

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

1 голос
/ 30 января 2010

Да, поскольку у класса нет элементов данных, вы можете сделать его одиночным.

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

public class Converter : IConverter<Foo, Bar> {

  private static _instance = new Converter();

  public static Instance { get { return _instance; } }

  public Foo ToFoo(Bar b) {return new Foo(b);}
  public Bar ToBar(Foo f) {return new Bar(f);}

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