I have a solution on which I have (more than) 2 projects.
The first project has a project reference to the second project. The second projec
What is a depedency ?
In order to understand what circular depedency is, it is better to understand what is a depedency and what it means to the compiler.
Let's say you have a project and, in a class, you have the following defined :
Public Class MyClass
'Some code here
Private MyString As String
'Some code there
End Class
When compiling your project, the compiler runs into the String class, which is defined in a DLL file called System. It will then link that DLL to your project, so at run-time, when defining or doing operation on the string, the System.dll will be loaded to perform those.
Now, let's say you have, further in your class, the following definition
'Some code here
Private MyObjet as CustomClass1
'Some code there
And let's say CustomClass1
is defined in another project of yours, named Project2.DLL :
Public Class CustomClass1
'Your customr class code
End Class
So when compiling your first project, the compiler will run into CustomClass1
definition, it knows it lays into Project2.dll and therefore will compile Project2 before, in order to be able to add that reference in your first project.
That's what a depedency is, it's hierarchical, there must be a starting point. Even the String class is dependant on other classes, and at the end, they all rely on bytes or bits to do the job, because that's the only thing a computer can do, play with 1
and 0
.
So the circular part
So if you have, in Project2, a reference (a field definition, or something like that) that link to your first project, what happens ?
CustomClass1
CustomClass1
So at some point the compiler displays an error, saying it cannot compile, as it doesn't understand what you're trying to do...
Yes, computers are that stupid.
How to solve it ?
Solving these kind of issue is sometimes difficult, but the basic idea is to build up a hierarchical structure, put the base class (those which don't need depedencies) together, then build up on them.
Take all the classes that depend on each other and put them together, they form a layer for something you try to do in your application.