MEF Execute Plugin Exports in Threads
Only a quick shot at AssembleMEFComponents() method  


declare your variables as near to their usage as possible.
using try..catch like you do is not only superfluous but also breaks the stacktrace.  
comments like //Add to the aggregate catalog are superfluous too. Comments should describe why something is done in the way it is done. What is done should be described by the code itself by using meaningful and descriptive name for methods, variables and classes.  


That being said your method should look like so  

public void AssembleMEFComponents()
{

    var directoryCatalog = new DirectoryCatalog(directoryPath, "*.dll");

    var assemblyCatalog = new AssemblyCatalog(Assembly.GetExecutingAssembly());

    var aggregateCatalog = new AggregateCatalog();
    aggregateCatalog.Catalogs.Add(directoryCatalog);
    aggregateCatalog.Catalogs.Add(assemblyCatalog );

    var container = new CompositionContainer(aggregateCatalog);

    container.ComposeParts(this);
}