13

En mi último proyecto utilizamos MSBuild como lenguaje de scripting. (¡sí, de verdad!) También escribimos cientos de tareas personalizadas de MSBuild, para las partes que tenían más sentido en C#. (Incluso escribí una tarea de MSBuild para generar el código repetitivo para una tarea de MSBuild. Sí, se consumió solo)¿Cuál es la mejor forma de administrar un árbol de dependencias en .NET?

Aunque no recomiendo a nadie más que tome este mismo enfoque, una de las cosas que me resultó de mucha ayuda fue la gestión de dependencias incorporada. Como era de esperar, fue fácil expresar las relaciones de dependencia y dejar que MSBuild se encargue de satisfacerlas. Por ejemplo, casi todos los pasos de nuestro software requerían que un cierto conjunto de archivos se copiara en una ubicación determinada. Desde aquí se puede escribir:

Step1: CopyFiles 
Step2: CopyFiles, Step1 

y cuando se ejecuta Step2, sólo sería copiar los archivos una vez.

Crear y satisfacer un árbol de dependencias es bastante común en el software. Deseo que el equipo de MSBuild tome su código de administración de dependencias, lo desacople de MSBuild y lo mueva al .NET Framework donde cualquiera pueda usarlo. A excepción de eso, , ¿cuál cree que es la mejor opción para administrar dependencias de esta manera?

Respuesta

5

Creo que podría usar un contenedor de IOC como Spring para obtener este tipo de comportamiento.

Cree una instancia de cualquier tarea que solo se ejecute una vez como singleton y haga que el constructor del objeto de tarea ejecute la tarea. Luego, cualquier objeto que aparezca más tarde con una dependencia en esa tarea obtendrá una referencia a la tarea que ya se ejecutó y podrá obtener los resultados de esa tarea o podrá inferir que esa tarea ya se ejecutó con éxito.

En la configuración de primavera terminaría con muchas tareas encadenadas, cada una hace referencia a otras tareas en su configuración de constructor. Este enfoque es el más flexible y no está restringido a "tareas" o cualquier cosa demasiado pesada para ese asunto.

Supongo que cualquier biblioteca de flujo de trabajo también tiene conceptos similares. Pero no estoy realmente familiarizado con estos.

Creo que para cualquier cosa más pequeña, la gente debe simplemente rodar su propio gráfico de objeto e interfaz utilizando el patrón de visitante y tal vez un diccionario para mantener el estado.

1

Eche un vistazo al proyecto Refix en CodePlex. Representa REference FIX y funciona muy bien.

Cuestiones relacionadas