Синглтон с параметрами пахнет для меня подозрительно.
Рассмотрим ответ whateva и следующий код:
Singleton x = Singleton.getInstance("hello", "world");
Singleton y = Singleton.getInstance("foo", "bar");
Очевидно, что x == y и y работают с параметрами создания x, тогда как параметры создания y просто игнорируются.Результаты, вероятно, ... по крайней мере, сбивают с толку.
Если вы действительно, действительно упали, как будто вы должны это сделать, сделайте это так:
class SingletonExample
{
private static SingletonExample mInstance;
//other members...
private SingletonExample()
{ // never used
throw new Exception("WTF, who called this constructor?!?");
}
private SingletonExample(string arg1, string arg2)
{
mInstance.Arg1 = arg1;
mInstance.ObjectCaller = new ObjectCaller(arg2);
//etc... basically, create object...
}
public static SingletonExample Instance
{
get
{
if (mInstance == null)
{
throw new Exception("Object not created");
}
return mInstance;
}
}
public static void Create(string arg1, string arg2)
{
if (mInstance != null)
{
throw new Exception("Object already created");
}
mInstance = new SingletonExample(arg1, arg2);
}
}
В среде с многопоточностью добавьте синхронизациючтобы избежать условий гонки.