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?
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.
I'm not 100% sure but I don't think that's possible to do with MEF. One pattern to use to provide similar behavior though is the factory / provider pattern.
interface IData {}
interface IDataProvider {
IData Data { get; set; }
}
[Export(IDataProvider)]
class DataProvider : IDataProvider {
public IData { get; set; }
}
You can use this pattern to dynamically update the implementation of IData
to the value you would like to use.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With