There are two ways to manage circular dependencies. The first one is deferring invocation of dependencies until runtime - which is what you are doing now. The second one is "Dependency Injection". Here is an article that demonstrates both the concepts.