One thing that the MEF (http://mef.codeplex.com/) made me realise was how difficult it really is for my to abstract away the tight coupling.
For example – one of the fundamental that MEF addresses – it the coupling that this statement introduces:
IMyClass someObjectInstance = new MyClass;
This really introduces an unnecessary tight coupling between the interface (IMyClass), the class (MyClass), and the object reference (someObjectInstance).
What I really like about MEF is that everything is dependent on the interface, and only on the interface – so what is really abstracted away is the object creation. This really puts in a more substantial meaning to the notion of abstract classes and interfaces since they become real abstractions and makes the developer – to use a buzzword – think in ‘composition’.