Here's my take on this:
you only NEED one interface for MEF to work. Wow, you really don't even need that, you could resolve a named contract of type object
that returns an object and that object can do whatever it wants like resolve other dependencies via MEF with contracts in their OWN libraries.
[Import("MyEntryDelegate",typeof(object))]
public Lazy<object> mefBootstrapper { get; set; }
you have an object resolved by MEF for one common known interface and all other MEF resolved objects will discover their own parts in the external dlls loaded in the catalogs. Like shake and bake IoC, write your own interfaces in your library and [Import]
the dependencies to your hearts content
In the constructor of whatever object you are creating, you can bootstrap whatever you want.
interface INeedSomethingOfMyOwn{
void DoSomething();
}
[Export("MyEntryDelegate",typeof(object))]
class MyClass{
private readonly INeedSomethingOfMyOwn _myobj;
[ImportingConstructor]
public MyClass([Import]INeedSomethingOfMyOwn myobj){
_myobj = myobj;
}
}