2010-12-28 13 views
8

Tengo dos proyectos de clase en una solución de Visual Studio. Debido a la naturaleza del proyecto, ambos proyectos se referencian entre sí porque necesitan los servicios de los demás (piense en la frase "me rasco la espalda, rasca la mía").Resolving circular depenency

Visual Studio (2010) no me deja agregar una referencia al proyecto b del proyecto a, porque project a ya hace referencia al proyecto b.

¿Qué estrategias existen para resolver esta dependencia circular?

Gracias

Respuesta

8

Hay dos enfoques típicos que puede utilizar:

1) combinar ambos proyectos en un solo proyecto.

alt text

2) Encontrar las partes comunes de los dos proyectos y el factor a cabo en un tercer proyecto separado.

alt text

+0

punto 2 es mucho más orientada a OOP. –

2

Nada menos que "tengo que romperlo". Separe los dos o combínelos en un solo módulo.

4

Refactor los servicios independientes (aquellos que no dependen de los otros proyectos) a una tercera biblioteca de clases y tener los dos proyectos de referencia de este tercero.

Por otro lado, si los dos proyectos están tan estrechamente acoplados, entonces también debería considerar combinarlos en un único proyecto.

1

Un proyecto puede exponer las interfaces que el otro proyecto implementa y luego ya no necesita una referencia al otro proyecto.

0

Tuvimos una situación similar en la que tenemos que llamar a la clase dbCon para obtener la cadena de conexión db del proyecto a para el proyecto b. Lo resolvimos guardándolo en la tabla dbconfig en la base de datos y pasándolo como un parámetro para el proyecto b.

0

Probablemente la solución correcta es dividir parte del "proyecto a" y "proyecto b" en un "proyecto c". Entonces A y B dependen de C, y ninguno depende del otro.

No hay forma posible de tener una dependencia circular real, fuera de un proceso de compilación incremental donde se genera A.dll que contiene todo lo que B.dll necesita pero nada que B.dll necesita, luego lo reemplaza con uno nuevo que se ha creado utilizando el B.dll recién creado y contiene elementos que dependen de él. Al final, una estrategia tan compleja no valdría la pena.

También podría ser posible construir netmodules y luego combinarlos juntos en un ensamblaje utilizando Assembly Linker, pero una vez más, el resultado no justificaría el esfuerzo involucrado.