2 using System.Windows.Navigation;
4 using Caliburn.Micro.Logging;
5 using Pithos.Client.WPF.Caliburn.Micro.Logging;
8 using log4net.Appender;
13 namespace Pithos.Client.WPF
16 using System.Collections.Generic;
17 using System.ComponentModel.Composition;
18 using System.ComponentModel.Composition.Hosting;
19 using System.ComponentModel.Composition.Primitives;
23 public class AppBootstrapper : Bootstrapper<IShell>
25 CompositionContainer container;
27 public AppBootstrapper()
31 LogManager.GetLog = type => new log4netLogger(type);
34 private static void ConfigureLogging()
36 var patternLayout = new PatternLayout();
37 patternLayout.ConversionPattern = "%logger (%property{myContext}) [%level]- %message%newline";
38 patternLayout.ActivateOptions();
39 var appender = new TraceAppender { Layout = patternLayout };
40 appender.AddFilter(new LevelRangeFilter{LevelMin=log4net.Core.Level.Info,LevelMax=log4net.Core.Level.Fatal});
41 appender.ActivateOptions();
43 BasicConfigurator.Configure(appender);
47 /// By default, we are configured to use MEF
49 protected override void Configure() {
50 var catalog = new AggregateCatalog(
51 AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>()
54 Type[] types = { typeof(PithosMonitor), typeof(CloudFilesClient) };
55 foreach (var type in types)
57 catalog.Catalogs.Add(new AssemblyCatalog(type.Assembly));
63 container = new CompositionContainer(catalog);
65 var batch = new CompositionBatch();
67 batch.AddExportedValue<IWindowManager>(new WindowManager());
68 batch.AddExportedValue<IEventAggregator>(new EventAggregator());
69 batch.AddExportedValue(container);
70 batch.AddExportedValue(catalog);
77 container.Compose(batch);
80 protected override object GetInstance(Type serviceType, string key)
82 string contract = string.IsNullOrEmpty(key) ? AttributedModelServices.GetContractName(serviceType) : key;
83 var exports = container.GetExportedValues<object>(contract);
85 if (exports.Count() > 0)
86 return exports.First();
88 throw new Exception(string.Format("Could not locate any instances of contract {0}.", contract));
91 protected override IEnumerable<object> GetAllInstances(Type serviceType)
93 return container.GetExportedValues<object>(AttributedModelServices.GetContractName(serviceType));
96 protected override void BuildUp(object instance)
98 container.SatisfyImportsOnce(instance);