Q:

Getting multiple MEF catalog/container

As is answered in this post, I can use this code for getting plugins using catalog/container.
var catalog = new AggregateCatalog(); 
catalog.Catalogs.Add(new DirectoryCatalog(@"./")); // or different directory
var container = new CompositionContainer(catalog);
container.ComposeParts(this);

How is this code modified when I need multiple plugins? For example, if I have two plugins : one for getting color using interface Icolor, and the other for size using interface Isize, how can I discriminate between the two?
I can think of having two different directories for both color and size, but I don't think this is a general solution.
// get catalog and container
AggregateCatalog catalogForColor = new AggregateCatalog();
catalogForColor.Catalogs.Add(new DirectoryCatalog(@"/pluginForColorDirectory"));
var containerForColor = new CompositionContainer(catalogForColor);
containerForColor.ComposeParts(this);

AggregateCatalog catalogForSize = new AggregateCatalog();
catalogForSize.Catalogs.Add(new DirectoryCatalog(@"/pluginForSizeDirectory"));
var catalogForSize = new CompositionContainer(catalogForSize);
catalogForSize.ComposeParts(this);

// the property to store the catalog 
public IEnumerable<Lazy<Icolor, IMessageSenderMetadata>> Color { get; set; }
public IEnumerable<Lazy<Isize, IMessageSenderMetadata>> Size { get; set; }

A:

DrectoryCatalog and AssemblyCatalog instances will scan assemblies for ALL exported parts. This will include both types of your plugin. You should't have to create a whole new catalog and container for composing these types, it should just work as-is.

