protected virtual void BindServices(CompositionBatch batch) { batch.AddExportedValue<IWindowManager>(new WindowManager()); batch.AddExportedValue<IEventAggregator>(new EventAggregator()); batch.AddExportedValue(Container); batch.AddExportedValue(this); }
private bool Compose() { var catalog = new AggregateCatalog(); catalog.Catalogs.Add(new AssemblyCatalog(typeof(IMefShapesGame).Assembly)); catalog.Catalogs.Add(new AssemblyCatalog(typeof(DefaultDimensions).Assembly)); var partCreatorEP = new DynamicInstantiationExportProvider(); this._container = new CompositionContainer(catalog, partCreatorEP); partCreatorEP.SourceProvider = this._container; CompositionBatch batch = new CompositionBatch(); batch.AddPart(this); batch.AddExportedValue<ICompositionService>(this._container); batch.AddExportedValue<AggregateCatalog>(catalog); try { this._container.Compose(batch); } catch (CompositionException compositionException) { MessageBox.Show(compositionException.ToString()); Shutdown(1); return false; } return true; }
protected override void Configure() { _container = new CompositionContainer( new AggregateCatalog( AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>() ) ); MessageBinder.SpecialValues.Add("$orignalsourcecontext", context => { var args = context.EventArgs as RoutedEventArgs; if (args == null) { return null; } var fe = args.OriginalSource as FrameworkElement; if (fe == null) { return null; } return fe.DataContext; }); var batch = new CompositionBatch(); batch.AddExportedValue<IWindowManager>(new WindowManager()); batch.AddExportedValue<IEventAggregator>(new EventAggregator()); batch.AddExportedValue(_container); _container.Compose(batch); }
/// <summary>Override to configure the framework and setup your IoC container.</summary> protected override void Configure() { // Add the assembly source to the catalog. // ReSharper disable once RedundantEnumerableCastCall var catalog = new AggregateCatalog(AssemblySource.Instance.Select(i => new AssemblyCatalog(i)).OfType<ComposablePartCatalog>()); // Create a new composition container. // ReSharper disable once RedundantEnumerableCastCall this.container = new CompositionContainer(); // Create a new composition container. this.container = new CompositionContainer(catalog); CompositionBatch compositionBatch = new CompositionBatch(); // Add EventAggregator to composition batch. compositionBatch.AddExportedValue<IEventAggregator>(new EventAggregator()); compositionBatch.AddExportedValue<IWindowManager>(new WindowManager()); compositionBatch.AddExportedValue<ISettingsRepository>(new SettingsRepository()); compositionBatch.AddExportedValue<ISolutionRepository>(new SolutionRepository()); compositionBatch.AddExportedValue(new LogWriter(this.BuildLoggingConfiguration())); // Add the container itself. compositionBatch.AddExportedValue(this.container); // Compose the container. this.container.Compose(compositionBatch); }
internal static IServiceLocator GetServiceLocator(Assembly assembly, CompositionBatch batch) { var assemblyLocation = assembly.Location; var file = new FileInfo(assemblyLocation); var catalogs = new List<ComposablePartCatalog> { new AssemblyCatalog(assembly), new DirectoryCatalog(file.DirectoryName ?? ".") }; var catalog = new AggregateCatalog(catalogs); var container = new CompositionContainer(catalog, CompositionOptions.DisableSilentRejection | CompositionOptions.IsThreadSafe ); var serviceLocator = new MefServiceLocator(container); batch.AddExportedValue(container); batch.AddExportedValue<IServiceLocator>(serviceLocator); container.Compose(batch); return serviceLocator; }
public void SingleContainerPartReplacement() { var container = ContainerFactory.Create(); var importPart = PartFactory.CreateImporter(true, "value1", "value2"); CompositionBatch batch = new CompositionBatch(); var export1Key = batch.AddExportedValue("value1", "Hello"); batch.AddExportedValue("value2", "World"); batch.AddPart(importPart); container.Compose(batch); Assert.AreEqual(2, importPart.ImportSatisfiedCount); Assert.AreEqual("Hello", importPart.GetImport("value1")); Assert.AreEqual("World", importPart.GetImport("value2")); importPart.ResetImportSatisfiedCount(); batch = new CompositionBatch(); batch.RemovePart(export1Key); batch.AddExportedValue("value1", "Goodbye"); container.Compose(batch); Assert.AreEqual(1, importPart.ImportSatisfiedCount); Assert.AreEqual("Goodbye", importPart.GetImport("value1")); Assert.AreEqual("World", importPart.GetImport("value2")); }
public Runner Init(IFeedbackProvider feedbackProvider, string[] args) { var catalog = new AggregateCatalog(new AssemblyCatalog(typeof(Bootstrapper).Assembly)); var currentDir = Environment.CurrentDirectory; var assemblyDir = new FileInfo(new Uri(Assembly.GetExecutingAssembly().CodeBase).AbsolutePath).Directory.FullName; var paths = new string[] { assemblyDir, Path.Combine(assemblyDir, "Tasks"), currentDir, Path.Combine(currentDir, "Tasks") }.Unique(); var dirCatalogs = paths.Where(x => Directory.Exists(x)) .Select(x => new DirectoryCatalog(x, "*.Tasks.dll")); dirCatalogs.Apply(x => catalog.Catalogs.Add(x)); var container = new CompositionContainer(catalog); var parsed = new ArgumentParser().Parse(args); var runner = new Runner(parsed.ActualArgs.ToArray()); var batch = new CompositionBatch(); batch.AddExportedValue<IFeedbackProvider>(feedbackProvider); parsed.Options.Apply(x => batch.AddExportedValue<string>(x.Item1, x.Item2)); parsed.Switches.Apply(x => batch.AddExportedValue<bool>(x, true)); batch.AddPart(runner); container.Compose(batch); return runner; }
protected override void Configure() { _container = new CompositionContainer(new AggregateCatalog(AssemblySource .Instance .Select(x => new AssemblyCatalog(x)) .OfType<ComposablePartCatalog>() ) ); var batch = new CompositionBatch(); _portName = SerialPort.GetPortNames()[0]; _ecr = new Dp25(_portName); var messenger = new MessageAggregator(); messenger.GetStream<SelectedPortChangedEvent>() .Subscribe(e => _ecr.ChangePort(e.PortName)); batch.AddExportedValue<IWindowManager>(new WindowManager()); batch.AddExportedValue<IMessageAggregator>(messenger); batch.AddExportedValue<Dp25>(_ecr); batch.AddExportedValue(_container); _container.Compose(batch); }
protected override void Configure() { _container = new CompositionContainer( new AggregateCatalog(AssemblySource.Instance.Select(x => new AssemblyCatalog(x))) ); var batch = new CompositionBatch(); var fileStream = new FileStream(LocalSettings.ClientXmlFilePath, FileMode.OpenOrCreate, FileAccess.Read); _settings = SettingsManager.LoadSettings<LocalSettings>(fileStream); if (_settings == null) { _settings = new LocalSettings { FirstRun = true }; } else { _settings.FirstRun = false; } batch.AddExportedValue(_settings); batch.AddExportedValue<IWindowManager>(new WindowManager()); batch.AddExportedValue<IEventAggregator>(new EventAggregator()); batch.AddExportedValue(_container); _container.Compose(batch); }
public void BatchMultipleAdds_ShouldFireEvents() { var container = ContainerFactory.Create(); var eventListener = new ExportProviderListener(container, container); var batch = new CompositionBatch(); batch.AddExportedValue<object>("MyExport", new object()); batch.AddExportedValue<object>("MyExport2", new object()); batch.AddExportedValue<object>("MyExport3", new object()); eventListener.VerifyCompose(batch); }
public void Compose() { var first = new AssemblyCatalog(Assembly.GetExecutingAssembly()); var container = new CompositionContainer(first); var batch = new CompositionBatch(); batch.AddExportedValue<IFileSystem>(new FileSystem()); batch.AddExportedValue<IContentTransform>(new WebSequenceDiagrams()); batch.AddPart(this); container.Compose(batch); }
/* Managed Extensibility Framework * A lot of this is just copy paste code, from http://caliburnmicro.com/documentation/bootstrapper * This is used to make whatever we store in our CompositionContainer available across the application. * In this example we have put the windowmanager and the evenAggregator in it. * The WindowManager manages creation and showing of windows/dialogs/stuff like that. * The EventAggregator is a service that provides us with the ability to publish objects from one entity to another, in a loose fashion. http://caliburnmicro.com/documentation/event-aggregator * Once the configure part of this is setup, you can go to your respective classes, and mark them with the [Export] attribute, and then if you for example * wanted to get a local instance of the windowmanager, mark the constructor with the [ImportingConstructor], like this: * [ImportingConstructor] * public AppViewModel(IWindowManager windowManager) * which will make the framework put in the applications instance of the windowmanager, for use in whatever you want to. */ protected override void Configure() { _container = new CompositionContainer(new AggregateCatalog(AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>())); //Collects values/stuff that has to go in our container CompositionBatch batch = new CompositionBatch(); batch.AddExportedValue<IWindowManager>(new WindowManager()); batch.AddExportedValue<IEventAggregator>(new EventAggregator()); batch.AddExportedValue(_container); _container.Compose(batch); }
protected override void Configure() { InitializeApplicationDataDirectory(); var composeTask = Task.Factory.StartNew(() => { // var aggregateCatalog = new AggregateCatalog(AssemblySource.Instance.Select(x => new AssemblyCatalog(x))); var aggregateCatalog = new AggregateCatalog(new AssemblyCatalog(GetType().Assembly), new AssemblyCatalog(typeof(AutoCaptureEngine).Assembly), new AssemblyCatalog(typeof(IRepository<>).Assembly)); Container = new CompositionContainer(aggregateCatalog); var batch = new CompositionBatch(); batch.AddExportedValue(Container); batch.AddExportedValue<IEventAggregator>(new EventAggregator()); batch.AddExportedValue<IWindowManager>(new CustomWindowManager()); batch.AddExportedValue<Func<IMessageBox>>(() => Container.GetExportedValue<IMessageBox>()); batch.AddExportedValue<Func<HearthStatsDbContext>>(() => new HearthStatsDbContext()); // batch.AddExportedValue<IWindowManager>(new AppWindowManager()); // batch.AddExportedValue(MessageBus.Current); var compose = Container.GetExportedValue<CompositionBuilder>(); compose.Compose(batch); // var composeTasks = this.GetAllInstances<ICompositionTask>(); // composeTasks.Apply(s => s.Compose(batch)); Container.Compose(batch); }); var initDbTask = Task.Factory.StartNew(InitializeDatabase); Task.WaitAll(composeTask, initDbTask); var logPath = Path.Combine((string)AppDomain.CurrentDomain.GetData("DataDirectory"), "logs"); _logManager = Container.GetExportedValue<IAppLogManager>(); _logManager.Initialize(logPath); Container.GetExportedValue<CrashManager>().WireUp(); // Apply xaml/wpf fixes var currentUICult = Thread.CurrentThread.CurrentUICulture.Name; var currentCult = Thread.CurrentThread.CurrentCulture.Name; Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo(currentUICult); Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo(currentCult); FrameworkElement.LanguageProperty.OverrideMetadata( typeof(FrameworkElement), new FrameworkPropertyMetadata(XmlLanguage.GetLanguage(CultureInfo.CurrentCulture.IetfLanguageTag))); // Hook caliburn filter FilterFrameworkCoreCustomization.Hook(); // Hook application events Application.Activated += (s, e) => Container.GetExportedValue<IEventAggregator>().PublishOnCurrentThread(new ApplicationActivatedEvent()); Application.Deactivated += (s, e) => Container.GetExportedValue<IEventAggregator>().PublishOnCurrentThread(new ApplicationDeActivatedEvent()); }
protected override void Configure() { var catalog = new AggregateCatalog(AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>()); container = new CompositionContainer(catalog); var batch = new CompositionBatch(); batch.AddExportedValue<IWindowManager>(new WindowManager()); batch.AddExportedValue<IEventAggregator>(new EventAggregator()); batch.AddExportedValue(container); container.Compose(batch); }
protected override void Configure() { container = new CompositionContainer(new AssemblyCatalog(Assembly.GetAssembly(typeof(ShellViewModel)))); var batch = new CompositionBatch(); batch.AddExportedValue<IWindowManager>(new WindowManager()); batch.AddExportedValue<IEventAggregator>(new EventAggregator()); batch.AddExportedValue(container); container.Compose(batch); }
internal static CompositionBatch GetCompositionBatch() { const string DIAGNOSTICS_ADDRESS = @"net.tcp://localhost:6000/DiagnosticService.svc"; var batch = new CompositionBatch(); if (!string.IsNullOrEmpty(DIAGNOSTICS_ADDRESS)) batch.AddExportedValue(DiagnosticsAddressProvider.DIAGNOSTICS_SERVICE_ADDRESS, DIAGNOSTICS_ADDRESS); batch.AddExportedValue("TRACE_BROADCAST_SHARED_SECRET", "secret"); return batch; }
public override void HandleInstance(CompositionBatch batch, Instance instance) { var factory = IoC.Get<IProxyFactory>(); var impl = factory.CreateProxyWithTarget( instance.Service, instance.Implementation, Enumerable.ToArray(instance.GetType().GetAttributes<IBehavior>(true)) ); if (!instance.HasName()) batch.AddExportedValue(AttributedModelServices.GetContractName(instance.Service), impl); else batch.AddExportedValue(instance.Name, impl); }
public SSBootstraper() { var aggregateCatalog = new AggregateCatalog(); string currentPath = Directory.GetCurrentDirectory(); aggregateCatalog.Catalogs.Add(new DirectoryCatalog(currentPath)); aggregateCatalog.Catalogs.Add(new AssemblyCatalog(typeof(SSBootstraper).Assembly)); _container = new CompositionContainer(aggregateCatalog); var logger = new SSLogger(); var composition = new CompositionBatch(); composition.AddExportedValue(_container); composition.AddExportedValue(logger); _container.Compose(composition); _mainViewModel = _container.GetExportedValue<ISSMainViewModel>(); }
protected override void Configure() { container = new CompositionContainer( new AggregateCatalog(AssemblySource.Instance.Select(x => new AssemblyCatalog(x))) ); var batch = new CompositionBatch(); batch.AddExportedValue<IWindowManager>(new WindowManager()); batch.AddExportedValue<IEventAggregator>(new EventAggregator()); batch.AddExportedValue<DialogViewModel>(new DialogViewModel()); batch.AddExportedValue(container); container.Compose(batch); }
// no state changes // what exceptions we should guard against? public override void ProcessRequest(HttpContextBase context) { var data = RequestParser.ParseDescriminators(context.Request); var container = context.GetContainer(); if (container == null) throw new InvalidOperationException("No request container available?"); var batch = new CompositionBatch(); batch.AddExportedValue(typeof(RouteData).GetContract(), data); batch.AddExportedValue(typeof(ControllerContext).GetContract(), new ControllerContext()); container.Compose(batch); Runner.Process(data, context); }
void ConfigureContainer() { container = CompositionHost.Initialize( new AggregateCatalog( AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>() ) ); var batch = new CompositionBatch(); batch.AddExportedValue<IWindowManager>(new WindowManager()); batch.AddExportedValue<IEventAggregator>(new EventAggregator()); batch.AddExportedValue(container); container.Compose(batch); }
public void SingleContainerSimpleCompose() { var container = ContainerFactory.Create(); ImportingComposablePart importPart; CompositionBatch batch = new CompositionBatch(); batch.AddExportedValue("value1", "Hello"); batch.AddExportedValue("value2", "World"); batch.AddPart(importPart = PartFactory.CreateImporter("value1", "value2")); container.Compose(batch); Assert.AreEqual(2, importPart.ImportSatisfiedCount); Assert.AreEqual("Hello", importPart.GetImport("value1")); Assert.AreEqual("World", importPart.GetImport("value2")); }
static void Main(string[] args) { var directoryCatalog = new DirectoryCatalog("."); var assemblyCatalog = new AssemblyCatalog(typeof(Program).Assembly); var aggregateCatalog = new AggregateCatalog(assemblyCatalog, directoryCatalog); var container = new CompositionContainer(aggregateCatalog); var batch = new CompositionBatch(); batch.AddExportedValue<IPlugin>(new DelegatePlugin("Exit", () => Environment.Exit(0))); batch.AddExportedValue<IPlugin>(new DelegatePlugin("Refresh", directoryCatalog.Refresh)); container.Compose(batch); container.GetExportedValue<Program>().Run(); }
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); #if (DEBUG != true) // Don't handle the exceptions in Debug mode because otherwise the Debugger wouldn't // jump into the code when an exception occurs. DispatcherUnhandledException += AppDispatcherUnhandledException; AppDomain.CurrentDomain.UnhandledException += AppDomainUnhandledException; #endif AggregateCatalog catalog = new AggregateCatalog(); // Add the WpfApplicationFramework assembly to the catalog catalog.Catalogs.Add(new AssemblyCatalog(typeof(Controller).Assembly)); // Add the Waf.BookLibrary.Library.Presentation assembly to the catalog catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly())); // Add the Waf.BookLibrary.Library.Applications assembly to the catalog catalog.Catalogs.Add(new AssemblyCatalog(typeof(ShellViewModel).Assembly)); this.container = new CompositionContainer(catalog); CompositionBatch batch = new CompositionBatch(); batch.AddExportedValue(container); this.container.Compose(batch); this.applicationController = container.GetExportedValue<IApplicationController>(); this.applicationController.Initialize(); this.applicationController.Run(); }
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); #if (DEBUG != true) // Don't handle the exceptions in Debug mode because otherwise the Debugger wouldn't // jump into the code when an exception occurs. DispatcherUnhandledException += AppDispatcherUnhandledException; AppDomain.CurrentDomain.UnhandledException += AppDomainUnhandledException; #endif catalog = new AggregateCatalog(); // Add the WpfApplicationFramework assembly to the catalog catalog.Catalogs.Add(new AssemblyCatalog(typeof(Controller).Assembly)); // Load module assemblies as well. See App.config file. foreach (string moduleAssembly in Settings.Default.ModuleAssemblies) { catalog.Catalogs.Add(new AssemblyCatalog(moduleAssembly)); } container = new CompositionContainer(catalog); CompositionBatch batch = new CompositionBatch(); batch.AddExportedValue(container); container.Compose(batch); // Initialize all presentation services var presentationServices = container.GetExportedValues<IPresentationService>(); foreach (var presentationService in presentationServices) { presentationService.Initialize(); } // Initialize and run all module controllers moduleControllers = container.GetExportedValues<IModuleController>(); foreach (var moduleController in moduleControllers) { moduleController.Initialize(); } foreach (var moduleController in moduleControllers) { moduleController.Run(); } }
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); DispatcherUnhandledException += AppDispatcherUnhandledException; AppDomain.CurrentDomain.UnhandledException += AppDomainUnhandledException; catalog = new AggregateCatalog(); // Add the WpfApplicationFramework assembly to the catalog catalog.Catalogs.Add(new AssemblyCatalog(typeof(IMessageService).Assembly)); // Load module assemblies as well. See App.config file. foreach (string moduleAssembly in Settings.Default.ModuleAssemblies) { catalog.Catalogs.Add(new AssemblyCatalog(moduleAssembly)); } container = new CompositionContainer(catalog, CompositionOptions.DisableSilentRejection); CompositionBatch batch = new CompositionBatch(); batch.AddExportedValue(container); container.Compose(batch); // Initialize all presentation services var presentationServices = container.GetExportedValues<IPresentationService>(); foreach (var presentationService in presentationServices) { presentationService.Initialize(); } // Initialize and run all module controllers moduleControllers = container.GetExportedValues<IModuleController>(); foreach (var moduleController in moduleControllers) { moduleController.Initialize(); } foreach (var moduleController in moduleControllers) { moduleController.Run(); } }
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); #if (DEBUG != true) // Don't handle the exceptions in Debug mode because otherwise the Debugger wouldn't // jump into the code when an exception occurs. DispatcherUnhandledException += AppDispatcherUnhandledException; AppDomain.CurrentDomain.UnhandledException += AppDomainUnhandledException; #endif XmlConfigurator.Configure(); _log.Debug("OnStartup called"); var catalog = new AggregateCatalog(); catalog.Catalogs.Add(new AssemblyCatalog(typeof(Controller).Assembly)); catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly())); catalog.Catalogs.Add(new AssemblyCatalog(typeof(IApplicationController).Assembly)); catalog.Catalogs.Add(new AssemblyCatalog(typeof(ValidationModel).Assembly)); _container = new CompositionContainer(catalog); var batch = new CompositionBatch(); batch.AddExportedValue(_container); _container.Compose(batch); _controller = _container.GetExportedValue<IApplicationController>(); _controller.Initialize(); _controller.Run(); }
/// <summary> /// By default, we are configured to use MEF /// </summary> protected override void Configure() { // Add all assemblies to AssemblySource (using a temporary DirectoryCatalog). var directoryCatalog = new DirectoryCatalog(@"./"); AssemblySource.Instance.AddRange( directoryCatalog.Parts .Select(part => ReflectionModelServices.GetPartType(part).Value.Assembly) .Where(assembly => !AssemblySource.Instance.Contains(assembly))); // Prioritise the executable assembly. This allows the client project to override exports, including IShell. // The client project can override SelectAssemblies to choose which assemblies are prioritised. var priorityAssemblies = SelectAssemblies().ToList(); var priorityCatalog = new AggregateCatalog(priorityAssemblies.Select(x => new AssemblyCatalog(x))); var priorityProvider = new CatalogExportProvider(priorityCatalog); // Now get all other assemblies (excluding the priority assemblies). var mainCatalog = new AggregateCatalog( AssemblySource.Instance .Where(assembly => !priorityAssemblies.Contains(assembly)) .Select(x => new AssemblyCatalog(x))); var mainProvider = new CatalogExportProvider(mainCatalog); Container = new CompositionContainer(priorityProvider, mainProvider); priorityProvider.SourceProvider = Container; mainProvider.SourceProvider = Container; var batch = new CompositionBatch(); BindServices(batch); batch.AddExportedValue(mainCatalog); Container.Compose(batch); }
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); DispatcherUnhandledException += AppDispatcherUnhandledException; AppDomain.CurrentDomain.UnhandledException += AppDomainUnhandledException; catalog = new AggregateCatalog(); // Add the WpfApplicationFramework assembly to the catalog catalog.Catalogs.Add(new AssemblyCatalog(typeof(ViewModel).Assembly)); // Add the Waf.BookLibrary.Library.Presentation assembly to the catalog catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly())); // Add the Waf.BookLibrary.Library.Applications assembly to the catalog catalog.Catalogs.Add(new AssemblyCatalog(typeof(ShellViewModel).Assembly)); // Load module assemblies as well (e.g. Reporting extension). See App.config file. foreach(string moduleAssembly in Settings.Default.ModuleAssemblies) { catalog.Catalogs.Add(new AssemblyCatalog(moduleAssembly)); } container = new CompositionContainer(catalog, CompositionOptions.DisableSilentRejection); CompositionBatch batch = new CompositionBatch(); batch.AddExportedValue(container); container.Compose(batch); moduleControllers = container.GetExportedValues<IModuleController>(); foreach (IModuleController moduleController in moduleControllers) { moduleController.Initialize(); } foreach (IModuleController moduleController in moduleControllers) { moduleController.Run(); } }
protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); #if (DEBUG != true) // Don't handle the exceptions in Debug mode because otherwise the Debugger wouldn't // jump into the code when an exception occurs. DispatcherUnhandledException += AppDispatcherUnhandledException; AppDomain.CurrentDomain.UnhandledException += AppDomainUnhandledException; #endif catalog = new AggregateCatalog(); // Add the WpfApplicationFramework assembly to the catalog catalog.Catalogs.Add(new AssemblyCatalog(typeof(Controller).Assembly)); // Add the Waf.BookLibrary.Library.Presentation assembly to the catalog catalog.Catalogs.Add(new AssemblyCatalog(Assembly.GetExecutingAssembly())); // Add the Waf.BookLibrary.Library.Applications assembly to the catalog catalog.Catalogs.Add(new AssemblyCatalog(typeof(ShellViewModel).Assembly)); // Load module assemblies as well (e.g. Reporting extension). See App.config file. foreach(string moduleAssembly in Settings.Default.ModuleAssemblies) { catalog.Catalogs.Add(new AssemblyCatalog(moduleAssembly)); } container = new CompositionContainer(catalog); CompositionBatch batch = new CompositionBatch(); batch.AddExportedValue(container); container.Compose(batch); moduleControllers = container.GetExportedValues<IModuleController>(); foreach (IModuleController moduleController in moduleControllers) { moduleController.Initialize(); } foreach (IModuleController moduleController in moduleControllers) { moduleController.Run(); } }