Multiple plugin type

Hi, I'm working in a project where we need to allow the user to import different plugins that is plugin with different contracts.
The contracts are: IFilter, IFeature, IDimension and so on.
The MainViewModel has to expose a list for each plugin's contract type so:

Well firstly, inheriting from interfaces generally speaks bad design to me, you should reconsider your design.

What I do is the latter approach, however I use protected internal classes to implement attributes with metadata for each type of plugin, in these specialized plugin attributes i embed the type info, then use the metadata mef collects to sort them out after
they've been composed.

Having a PluginManager which returns to each VM the plugins it needs is a resonable approach. The manager is a shared part which imports all of the plugins and their metadata (IEnumerable<Lazy<T,M>>. It then exposes a method like GetPlugins which
accepts some sort of filter. The VMs access the plugin manager passing it whatever context they need to to get back the plugins they require.