root / trunk / Pithos.Client.WPF / AppBootstrapper.cs @ 692ec33b
History | View | Annotate | Download (2.7 kB)
1 | 9bae55d1 | Panagiotis Kanavos | using System.Windows; |
---|---|---|---|
2 | 0bd56b7c | Panagiotis Kanavos | using System.Windows.Controls; |
3 | 9bae55d1 | Panagiotis Kanavos | using System.Windows.Navigation; |
4 | cfed7823 | Panagiotis Kanavos | using Caliburn.Micro; |
5 | 9bae55d1 | Panagiotis Kanavos | using Caliburn.Micro.Logging; |
6 | aba9e6d9 | Panagiotis Kanavos | using Pithos.Client.WPF.Properties; |
7 | 9bae55d1 | Panagiotis Kanavos | using Pithos.Core; |
8 | 9bae55d1 | Panagiotis Kanavos | using Pithos.Network; |
9 | cfed7823 | Panagiotis Kanavos | using log4net.Appender; |
10 | cfed7823 | Panagiotis Kanavos | using log4net.Config; |
11 | cfed7823 | Panagiotis Kanavos | using log4net.Filter; |
12 | cfed7823 | Panagiotis Kanavos | using log4net.Layout; |
13 | 9bae55d1 | Panagiotis Kanavos | |
14 | 9bae55d1 | Panagiotis Kanavos | namespace Pithos.Client.WPF |
15 | 9bae55d1 | Panagiotis Kanavos | { |
16 | 9bae55d1 | Panagiotis Kanavos | using System; |
17 | 9bae55d1 | Panagiotis Kanavos | using System.Collections.Generic; |
18 | 9bae55d1 | Panagiotis Kanavos | using System.ComponentModel.Composition; |
19 | 9bae55d1 | Panagiotis Kanavos | using System.ComponentModel.Composition.Hosting; |
20 | 9bae55d1 | Panagiotis Kanavos | using System.ComponentModel.Composition.Primitives; |
21 | 9bae55d1 | Panagiotis Kanavos | using System.Linq; |
22 | 9bae55d1 | Panagiotis Kanavos | using Caliburn.Micro; |
23 | 9bae55d1 | Panagiotis Kanavos | |
24 | 9bae55d1 | Panagiotis Kanavos | public class AppBootstrapper : Bootstrapper<IShell> |
25 | 9bae55d1 | Panagiotis Kanavos | { |
26 | 9bae55d1 | Panagiotis Kanavos | CompositionContainer container; |
27 | 9bae55d1 | Panagiotis Kanavos | |
28 | 9bae55d1 | Panagiotis Kanavos | public AppBootstrapper() |
29 | 9bae55d1 | Panagiotis Kanavos | { |
30 | cfed7823 | Panagiotis Kanavos | LogManager.GetLog = type => new log4netLogger(type); |
31 | aba9e6d9 | Panagiotis Kanavos | UpgradeSettings(); |
32 | c92e02f3 | Panagiotis Kanavos | |
33 | 9bae55d1 | Panagiotis Kanavos | } |
34 | 9bae55d1 | Panagiotis Kanavos | |
35 | aba9e6d9 | Panagiotis Kanavos | private void UpgradeSettings() |
36 | aba9e6d9 | Panagiotis Kanavos | { |
37 | aba9e6d9 | Panagiotis Kanavos | if (Settings.Default.MustUpgrade) |
38 | aba9e6d9 | Panagiotis Kanavos | { |
39 | aba9e6d9 | Panagiotis Kanavos | Settings.Default.Upgrade(); |
40 | aba9e6d9 | Panagiotis Kanavos | Settings.Default.MustUpgrade = false; |
41 | aba9e6d9 | Panagiotis Kanavos | Settings.Default.Save(); |
42 | aba9e6d9 | Panagiotis Kanavos | } |
43 | aba9e6d9 | Panagiotis Kanavos | } |
44 | aba9e6d9 | Panagiotis Kanavos | |
45 | aba9e6d9 | Panagiotis Kanavos | /// <summary> |
46 | 9bae55d1 | Panagiotis Kanavos | /// By default, we are configured to use MEF |
47 | 9bae55d1 | Panagiotis Kanavos | /// </summary> |
48 | 9bae55d1 | Panagiotis Kanavos | protected override void Configure() { |
49 | 9bae55d1 | Panagiotis Kanavos | var catalog = new AggregateCatalog( |
50 | 9bae55d1 | Panagiotis Kanavos | AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>() |
51 | 9bae55d1 | Panagiotis Kanavos | ); |
52 | 9bae55d1 | Panagiotis Kanavos | |
53 | 9bae55d1 | Panagiotis Kanavos | Type[] types = { typeof(PithosMonitor), typeof(CloudFilesClient) }; |
54 | 9bae55d1 | Panagiotis Kanavos | foreach (var type in types) |
55 | 9bae55d1 | Panagiotis Kanavos | { |
56 | 9bae55d1 | Panagiotis Kanavos | catalog.Catalogs.Add(new AssemblyCatalog(type.Assembly)); |
57 | 9bae55d1 | Panagiotis Kanavos | } |
58 | 9bae55d1 | Panagiotis Kanavos | |
59 | 9bae55d1 | Panagiotis Kanavos | container = new CompositionContainer(catalog); |
60 | 9bae55d1 | Panagiotis Kanavos | |
61 | 9bae55d1 | Panagiotis Kanavos | var batch = new CompositionBatch(); |
62 | 9bae55d1 | Panagiotis Kanavos | |
63 | 9bae55d1 | Panagiotis Kanavos | batch.AddExportedValue<IWindowManager>(new WindowManager()); |
64 | 9bae55d1 | Panagiotis Kanavos | batch.AddExportedValue<IEventAggregator>(new EventAggregator()); |
65 | 9bae55d1 | Panagiotis Kanavos | batch.AddExportedValue(container); |
66 | 9bae55d1 | Panagiotis Kanavos | batch.AddExportedValue(catalog); |
67 | 9bae55d1 | Panagiotis Kanavos | |
68 | 9bae55d1 | Panagiotis Kanavos | |
69 | 9bae55d1 | Panagiotis Kanavos | container.Compose(batch); |
70 | 0bd56b7c | Panagiotis Kanavos | |
71 | 0bd56b7c | Panagiotis Kanavos | ConventionManager.AddElementConvention<MenuItem>(ItemsControl.ItemsSourceProperty, "DataContext", "Click"); |
72 | 9bae55d1 | Panagiotis Kanavos | } |
73 | 9bae55d1 | Panagiotis Kanavos | |
74 | 9bae55d1 | Panagiotis Kanavos | protected override object GetInstance(Type serviceType, string key) |
75 | 9bae55d1 | Panagiotis Kanavos | { |
76 | 9bae55d1 | Panagiotis Kanavos | string contract = string.IsNullOrEmpty(key) ? AttributedModelServices.GetContractName(serviceType) : key; |
77 | 9bae55d1 | Panagiotis Kanavos | var exports = container.GetExportedValues<object>(contract); |
78 | 9bae55d1 | Panagiotis Kanavos | |
79 | 9bae55d1 | Panagiotis Kanavos | if (exports.Count() > 0) |
80 | 9bae55d1 | Panagiotis Kanavos | return exports.First(); |
81 | 9bae55d1 | Panagiotis Kanavos | |
82 | 9bae55d1 | Panagiotis Kanavos | throw new Exception(string.Format("Could not locate any instances of contract {0}.", contract)); |
83 | 9bae55d1 | Panagiotis Kanavos | } |
84 | 9bae55d1 | Panagiotis Kanavos | |
85 | 9bae55d1 | Panagiotis Kanavos | protected override IEnumerable<object> GetAllInstances(Type serviceType) |
86 | 9bae55d1 | Panagiotis Kanavos | { |
87 | 9bae55d1 | Panagiotis Kanavos | return container.GetExportedValues<object>(AttributedModelServices.GetContractName(serviceType)); |
88 | 9bae55d1 | Panagiotis Kanavos | } |
89 | 9bae55d1 | Panagiotis Kanavos | |
90 | 9bae55d1 | Panagiotis Kanavos | protected override void BuildUp(object instance) |
91 | 9bae55d1 | Panagiotis Kanavos | { |
92 | 9bae55d1 | Panagiotis Kanavos | container.SatisfyImportsOnce(instance); |
93 | 9bae55d1 | Panagiotis Kanavos | } |
94 | 9bae55d1 | Panagiotis Kanavos | } |
95 | 9bae55d1 | Panagiotis Kanavos | } |