I love dependency injection. Specifically I like constructor dependency injection.
Sometimes however you have two objects that need to talk to each other. This means you need create each before the other to use constructor injection.
What I have been doing instead is creating a class I call a conduit.
The Conduit class implements one of the interfaces and delegates to another instance of that interface. It also provies a setter injection method to allow you to initialize the conduit.
To use it therefore you do the following:
1/ Create an instance of IXConduit
2/ create an instance of class Y passing in the IXConduit as an instance of IX
3/ create an instance of class X passing in Y
4/ call the setter injection method on the conduit passing X in.
When Y calls a method on the IX it has (the conduit) it passes on the call the the IX it has (the real instance of X), and X can call method on Y directly.
This means the compilcation of instantiation is not part of class X or Y so they don't get polluted by this design issue.