Чаще всего синглтоны не 'не разрешаем указывать какие-либо параметры при создании экземпляра, иначе второй запрос экземпляра, но с другим параметром, может быть проблематичным! (Если один и тот же экземпляр должен быть доступен для всех запросов с одним и тем же параметром, шаблон фабрики является более подходящим.)
Поскольку мне нужны параметры, и одинаковые экземпляры с одинаковыми параметрами - я пришел к выводу, что мне нужен фабричный шаблон.
Но мне нигде не удалось найти хорошую реализацию фабричного шаблона.
Пожалуйста, сообщите мне, если вы найдете какую-либо хорошую реализацию шаблона фабрики 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;
}
Что мне нужно сделать, чтобы получить этот код работает.
Мне нужен только 1 экземпляр класса A для указанных параметров.
Спасибо p>
Индраджит
Подробнее здесь: https://stackoverflow.com/questions/171 ... -arguments