Let's say that I have a few applications in a folder (each application has subfolders where plugins can be located):
Some files in these applications have an Export-attribute applied, others don't. Now, I want to be able to load these plugins in some of these applications. Is there a proper way to let MEF search recursively in every subfolder of a specified folder?
No, you will need to recurse through the directories yourself creating a DirectoryCatalog
for each. Then, combine all of the DirectoryCatalog
s with an AggregateCatalog
to create the container.
Another way is to get all the DLL files under a specified directory (recursively) and load them one by one using the assembly catalog.`
var catalog = new AggregateCatalog();
var files = Directory.GetFiles("Parent Directory", "*.dll", SearchOption.AllDirectories);
foreach (var dllFile in files)
{
try
{
var assembly = Assembly.LoadFile(dllFile);
var assemblyCatalog = new AssemblyCatalog(assembly);
catalog.Catalogs.Add(assemblyCatalog);
}
catch (Exception e)
{
// this happens if the given dll file is not a .NET framework file or corrupted.
}
}
There's a MEFContrib project available that has a RecursiveDirectoryCatalog for just this purpose...
https://www.nuget.org/packages/MefContrib/
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