2010-01-12 25 views
20

Tengo 2 proyectos.Dependencias circulares

Proyecto # 2 tiene una referencia al proyecto # 1

Ahora necesito para hacer referencia Proyecto # 2 en el Proyecto # 1, pero vs.net se queja de una dependencia circular.

¿Hay alguna forma de salir de esto?

+2

Al menos todos estamos de acuerdo en nuestra respuesta ... ;-). +1 a todos – David

Respuesta

52

Absolutamente no. Las dependencias circulares son una indicación de mal diseño. No quiero ser duro. Hay algunas formas de salir de esto.

1) Se puede refactorizar código común a otro proyecto, digamos Proyecto # 0

2) Usted puede fijar su diseño, que es probablemente el camino a seguir.

Uncle Bob tiene un buen artículo sobre Principios de empaquetado que incluye el Principio de dependencias acíclicas. http://www.objectmentor.com/resources/articles/granularity.pdf. Lea esto para saber por qué las dependencias cíclicas son malas.

+1

Una solución común es depender de abstracciones tales como interfaces en lugar de instancias concretas, y mover esas abstracciones a otro ensamblado. Pero, realmente, piense en la estructura de su proyecto y en lo que realmente pertenece. – kyoryu

+0

+1 para artículo vinculado. Divido mi único paquete "Logger" que abarca un conjunto de clases "Log de uso de aplicaciones" y una clase de "registro de errores" en dos paquetes separados (¡La mayoría de los paquetes no necesitan registrar el uso de la aplicación!) circular de vuelta al original. De vuelta a un DAG. Debería ser obligatoria la lectura para todos. – DFTR

+0

@kyoryu ¿Estás hablando del Principio de Inversión de Dependencia (DIP) que menciona en el artículo? - Estoy de acuerdo, probablemente debas tratar de averiguar POR QUÉ existe la posibilidad de dependencia circular, y quizás cambiar los elementos del diseño (si puedes) antes de depender de las abstracciones. – DFTR

5

Fusiona los dos en uno o rediseña.

4

No. Estructure sus proyectos correctamente. Intente utilizar algún tipo de orden basado en la abstracción: de bajo nivel a alto nivel.

5

Esto apunta a un problema en su diseño. Si existe una necesidad real de que dos o más de sus tipos conozcan mutuamente, entonces deberían existir en el mismo ensamblaje.

+0

¿Y si necesitan estar en diferentes idiomas? – Joshua

+0

¿Puedes dar un ejemplo? –

+0

[Ejemplo obsoleto:] En VS 2008, solo VB .NET puede usar filtros de excepción, mientras que solo C# puede usar expresiones Linq. No es demasiado difícil imaginar un caso donde estos aparezcan en configuraciones conflictivas. – Joshua

10

Refactorice sus proyectos para llevar los elementos comunes a un "Proyecto n. ° 0" que hace referencia tanto al Proyecto n. ° 1 como al Proyecto n. ° 2.

2

I realmente no me refiero a ser un sabelotodo, pero mejor diseño del programa es la respuesta.

3

Una dependencia circular significa que estos ya no son dos proyectos independientes (porque allí es imposible construir solo uno de ellos).

Necesita refactorizar para que solo tenga una dependencia de una sola dirección o combinarlas en un solo proyecto.

3

Referencia circular puede hacerse como se ve en un previous question, pero no debería hacerlo por las razones que todo el mundo ya se ha dicho aquí.

1

Esto parece ser un defecto de diseño, nada más. El rediseño es la solución.

-4

no creo que es una buena solución, pero todavía podemos hacer siguiendo estos pasos

  • agregar la referencia
  • Examinar y
  • ir a la carpeta de depuración del proyecto DLL,
  • encuentra el .dll y agrega.
+2

¡no hagas eso! ¡Siga lo que se indica en la respuesta aceptada! –

Cuestiones relacionadas