See the other (Basic) examples above.
using System.ComponentModel.Composition;
using System.ComponentModel.Composition.Hosting;
namespace Demo
{
public static class Program
{
public static void Main()
{
using (var catalog = new ApplicationCatalog())
using (var exportProvider = new CatalogExportProvider(catalog))
using (var container = new CompositionContainer(exportProvider))
{
exportProvider.SourceProvider = container;
UserWriter writer = new UserWriter();
// at this point, writer's userProvider field is null
container.ComposeParts(writer);
// now, it should be non-null (or an exception will be thrown).
writer.PrintAllUsers();
}
}
}
}
As long as something in the application's assembly search path has [Export(typeof(IUserProvider))]
, UserWriter
's corresponding import will be satisfied and the users will be printed.
Other types of catalogs (e.g., DirectoryCatalog
) can be used instead of (or in addition to) ApplicationCatalog
, to look in other places for exports that satisfy the imports.