Pregunta

(Esta pregunta específicamente en C #, pero generalmente se aplica a .NET)

Tengo una aplicación grande que tiene un diseño bastante bueno y se divide en secciones principales sobre interfaces (esto se hizo para ayudar al desarrollo paralelo).

Ahora tenemos un conjunto primario de clases concretas que implementan las interfaces requeridas, pero también tenemos conjuntos adicionales de clases concretas para situaciones y pruebas alternativas.

En este momento agrupamos todas estas clases en el nivel superior en código:

IMyInterface xComponent = new ConcreteXComponent1();

Si quiero intercambiar componentes, solo tengo que cambiar esa línea y volver a compilar:

// IMyInterface xComponent = new ConcreteXComponent1();
IMyInterface xComponent = new ConcreteXComponentAlternative();

Eso funciona muy bien, pero obviamente requiere una recompilación: prefiero que se elija la clase concreta utilizando un valor de un archivo de configuración.

¿Cuál es el patrón estándar para cambiar clases concretas usando un archivo de configuración? ¿Hay una biblioteca estándar que pueda usar que me resuelva este problema?

¡Gracias!

¿Fue útil?

Solución

Quieres mirar los contenedores IoC. (Spring.NET, StructureMap, Windsor, etc.)

Otros consejos

Puede usar el método Activator.CreateInstance . Una de las sobrecargas de métodos toma un nombre de tipo y crea una instancia con el constructor predeterminado. Luego puede almacenar el nombre del tipo de la clase en su archivo de configuración y leerlo desde su aplicación.

El uso de un contenedor IoC creará un grupo o colección de objetos que puede cargar dinámicamente. Los marcos que Romain sugirió usarán un archivo de configuración que describa los objetos y cómo se crean instancias.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top