首先,我在一个网站上读到了这篇文章article http://csharpindepth.com/- 这基本上告诉我我根本不应该使用单例 -
最常见的是,单例不允许在创建实例时指定任何参数 - 否则对实例的第二次请求但使用不同的参数可能会出现问题! (如果所有具有相同参数的请求都应该访问同一个实例,那么工厂模式更合适。)
由于我需要参数以及具有相同参数的相同实例 - 我得出的结论是我需要一个工厂模式。
但我无法在任何地方找到好的工厂模式实现。
如果您发现任何好的带参数的 C# 单例工厂模式实现,请指导我
好吧,我将尝试在这里非常具体......希望这可以解释我的情况。
最受欢迎的是替代方法。我只是结合了很多实现 - 我的理解可能不正确。
所以我有课'A'。它是一个用于连接数据库的类——数据库连接。
连接需要 4 个参数,约束条件为:
我需要有多个可能的连接 - 使用不同的数据库(参数不同)
我只需要特定连接的 1 个实例 - 参数相同的单例(以我的理解)
我需要一个工厂模型,按照上面提到的文章,还需要限制连接数量,超时后关闭连接等。
在此基础上,我需要一个带有参数/参数的单例工厂......我假设
所以 A 类看起来像这样
<which access modifier ?> 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<A> connections = new List<A>();
private AFactory()
{
//do something
}
private static readonly Lazy<AFactory> lazy
= new Lazy<AFactory>(() => 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 类实例。
Thanks
Indrajit