Search code examples
.netmefcompositionsystem.componentmodel

How to export a type in MEF as if the Export Attribute had been applied to that type?


I would like to dynamically apply the MEF Export attribute to a type at run-time, exactly as if the type had had an Export attribute applied at compile time.

Is there a simple way to do this?

Barring that, is there a complex way to do this?


Solution

  • If you can afford to use .NET 4.5 (which means dropping windows XP support), you can now use MEF's attribute-less registration aka Convention Model.

    In .NET4 or earlier MEF preview releases this is not supported out of the box, but MEF can still be extended by creating your own implementations of ExportProvider or ComposablePartCatalog.

    The MEF Contrib Fluent Definition Provider is such an implementation which allows you to register imports and exports by method calls.

    The MEF Contrib Configurable Definition Provider is another which allows you to set up the imports and exports in an XML file.

    Yet another option is to do the registration with Autofac and then use its MEF integration to make the autofac components available to MEF.