Necesito una clase singleton para crear una instancia con algunos argumentos. La forma en que estoy haciendo ahora es:Singleton con los parámetros
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...
}
}
la instancia se crea 'tarde', lo que significa que no tengo todos los argumentos necesarios en el arranque de aplicaciones.
En general, no me gusta forzar un pedido de llamadas a métodos, pero no veo otra manera aquí. El IoC tampoco lo resolvería, ya que donde puedo registrarlo en el contenedor, también puedo llamar a Crear() ...
¿Considera que es un buen escenario? ¿Tienes alguna otra idea?
edición: Yo sé que lo que escribí como un ejemplo que no es hilo de seguridad, hilo de seguridad no es parte de la pregunta
que es * not * a singleton. ¿Dónde está la exclusión mutua? (es decir, 'bloqueo'). además su 'getter' para la instancia debería estar creando la instancia, no el ctor, ese es el punto. – RPM1984
Estoy de acuerdo con RPM1984, este no es un singleton. ¿Pueden cambiar sus argumentos o serán los mismos durante la vigencia de su aplicación? Un singleton no debería depender de algo variable, podría depender de la configuración u otro singleton. Sin embargo, piense detenidamente en su diseño y pregúntese si necesita un singleton. Sobre el uso de singletons es realmente malo para su diseño. –
Es singleton, créeme :) el 'getter' no puede crear la instancia ya que no tiene argumentos, podría haberlo hecho, pero es más conveniente escribirlo así. Y, los argumentos, una vez obtenidos, no cambian. – veljkoz