Мне нужен одноэлементный класс, который будет создан с некоторыми аргументами. Теперь я делаю это так:
class SingletonExample
{
private SingletonExample mInstance;
//other members...
private SingletonExample()
{
}
public SingletonExample Instance
{
get
{
if (mInstance == null)
{
throw new Exception("Object not created");
}
return mInstance;
}
}
public void Create(string arg1, string arg2)
{
mInstance = new SingletonExample();
mInstance.Arg1 = arg1;
mInstance.ObjectCaller = new ObjectCaller(arg2);
//etc... basically, create object...
}
}
Экземпляр создается "late", то есть у меня нет всех необходимых аргументов при запуске приложения.
В общем, мне не нравится заставить упорядочить вызовы методов, но я не вижу другого способа здесь. IoC не разрешит его, так как там, где я могу зарегистрировать его в контейнере, я также могу вызвать Create()...
Считаете ли вы это ОК? Есть ли у вас другая идея?
edit: Я знаю, что то, что я написал в качестве примера, не является потокобезопасным, потокобезопасным не является частью вопроса