Создайте фабрику Singleton для класса, который принимает параметры/аргументы.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Создайте фабрику Singleton для класса, который принимает параметры/аргументы.

Сообщение Anonymous »

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

Чаще всего синглтоны не 'не разрешаем указывать какие-либо параметры при создании экземпляра, иначе второй запрос экземпляра, но с другим параметром, может быть проблематичным! (Если один и тот же экземпляр должен быть доступен для всех запросов с одним и тем же параметром, шаблон фабрики является более подходящим.)

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

Пожалуйста, сообщите мне, если вы найдете какую-либо хорошую реализацию шаблона фабрики Singleton в C# с параметрами.

Хорошо, я постараюсь быть здесь очень конкретным. ... надеюсь, это объясняет мою ситуацию.
Альтернативные методы приветствуются. Я просто объединил множество реализаций — возможно, мое понимание неверно.
Итак, у меня есть класс 'A'. Это класс, используемый для подключения к базе данных — подключение к базе данных.
Для подключения требуется 4 параметра и ограничения:
  • Мне нужно иметь несколько подключений — с разными базами данных (параметры различаются)
  • Мне нужен только 1 экземпляр конкретное соединение - синглтон с одинаковыми (в моем понимании) параметрами
  • Мне понадобится заводская модель по статье, указанной выше, и также для ограничения количества соединений, закрытия соединения по таймауту и ​​т.д.
На этой основе мне нужен синглтон фабрика с параметрами/аргументами... Я предполагаю
Итак, класс A будет выглядеть примерно так

Код: Выделить всё

 Class A {
private Class A(string hostname, string port, string username, string pw_hash) {
//create a new instance with the specified parameters
}
//other methods on the connection
protected void close() {
//close the connection
}
}

public class AFactory//should it inherit class A?? {

private IList connections = new List();
private AFactory()
{
//do something
}
private static readonly Lazy lazy
= new Lazy(() => new AFactory());

public static AFactory Instance { get { return lazy.Value; } }

public A getA(string hostname, string service, string username, string pw_hash)
{
foreach (A a in A)
{
if (a.hostname == hostname && a.service == service && a.username == username)
return a;
}
A d = new A(hostname, service, username, pw_hash);
connections.Add(d);
return d;
}
Теперь это работает хорошо, пока конструктор класса A является общедоступным, но это противоречит цели синглтона.
Что мне нужно сделать, чтобы получить этот код работает.
Мне нужен только 1 экземпляр класса A для указанных параметров.
Спасибо p>
Индраджит

Подробнее здесь: https://stackoverflow.com/questions/171 ... -arguments
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»