root / trunk / Pithos.Client.WPF / AppBootstrapper.cs @ 21141c06
History | View | Annotate | Download (5.2 kB)
1 | 7e39367d | pkanavos | #region |
---|---|---|---|
2 | 7e39367d | pkanavos | /* ----------------------------------------------------------------------- |
3 | 7e39367d | pkanavos | * <copyright file="AppBootstrapper.cs" company="GRNet"> |
4 | 7e39367d | pkanavos | * |
5 | 7e39367d | pkanavos | * Copyright 2011-2012 GRNET S.A. All rights reserved. |
6 | 7e39367d | pkanavos | * |
7 | 7e39367d | pkanavos | * Redistribution and use in source and binary forms, with or |
8 | 7e39367d | pkanavos | * without modification, are permitted provided that the following |
9 | 7e39367d | pkanavos | * conditions are met: |
10 | 7e39367d | pkanavos | * |
11 | 7e39367d | pkanavos | * 1. Redistributions of source code must retain the above |
12 | 7e39367d | pkanavos | * copyright notice, this list of conditions and the following |
13 | 7e39367d | pkanavos | * disclaimer. |
14 | 7e39367d | pkanavos | * |
15 | 7e39367d | pkanavos | * 2. Redistributions in binary form must reproduce the above |
16 | 7e39367d | pkanavos | * copyright notice, this list of conditions and the following |
17 | 7e39367d | pkanavos | * disclaimer in the documentation and/or other materials |
18 | 7e39367d | pkanavos | * provided with the distribution. |
19 | 7e39367d | pkanavos | * |
20 | 7e39367d | pkanavos | * |
21 | 7e39367d | pkanavos | * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS |
22 | 7e39367d | pkanavos | * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
23 | 7e39367d | pkanavos | * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR |
24 | 7e39367d | pkanavos | * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR |
25 | 7e39367d | pkanavos | * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
26 | 7e39367d | pkanavos | * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
27 | 7e39367d | pkanavos | * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF |
28 | 7e39367d | pkanavos | * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
29 | 7e39367d | pkanavos | * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
30 | 7e39367d | pkanavos | * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
31 | 7e39367d | pkanavos | * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE |
32 | 7e39367d | pkanavos | * POSSIBILITY OF SUCH DAMAGE. |
33 | 7e39367d | pkanavos | * |
34 | 7e39367d | pkanavos | * The views and conclusions contained in the software and |
35 | 7e39367d | pkanavos | * documentation are those of the authors and should not be |
36 | 7e39367d | pkanavos | * interpreted as representing official policies, either expressed |
37 | 7e39367d | pkanavos | * or implied, of GRNET S.A. |
38 | 7e39367d | pkanavos | * </copyright> |
39 | 7e39367d | pkanavos | * ----------------------------------------------------------------------- |
40 | 7e39367d | pkanavos | */ |
41 | 7e39367d | pkanavos | #endregion |
42 | 7e39367d | pkanavos | using System.Windows; |
43 | 7e39367d | pkanavos | using System.Windows.Controls; |
44 | 7e39367d | pkanavos | using System.Windows.Navigation; |
45 | 7e39367d | pkanavos | using Caliburn.Micro; |
46 | 7e39367d | pkanavos | using Caliburn.Micro.Logging; |
47 | 7e39367d | pkanavos | using Pithos.Client.WPF.Properties; |
48 | 7e39367d | pkanavos | using Pithos.Core; |
49 | 7e39367d | pkanavos | using Pithos.Network; |
50 | 7e39367d | pkanavos | using Xceed.Wpf.Toolkit; |
51 | 7e39367d | pkanavos | using log4net.Appender; |
52 | 7e39367d | pkanavos | using log4net.Config; |
53 | 7e39367d | pkanavos | using log4net.Filter; |
54 | 7e39367d | pkanavos | using log4net.Layout; |
55 | 7e39367d | pkanavos | |
56 | 7e39367d | pkanavos | namespace Pithos.Client.WPF |
57 | 7e39367d | pkanavos | { |
58 | 7e39367d | pkanavos | using System; |
59 | 7e39367d | pkanavos | using System.Collections.Generic; |
60 | 7e39367d | pkanavos | using System.ComponentModel.Composition; |
61 | 7e39367d | pkanavos | using System.ComponentModel.Composition.Hosting; |
62 | 7e39367d | pkanavos | using System.ComponentModel.Composition.Primitives; |
63 | 7e39367d | pkanavos | using System.Linq; |
64 | 7e39367d | pkanavos | using Caliburn.Micro; |
65 | 7e39367d | pkanavos | |
66 | 7e39367d | pkanavos | public class AppBootstrapper : Bootstrapper<IShell> |
67 | 7e39367d | pkanavos | { |
68 | 7e39367d | pkanavos | |
69 | 7e39367d | pkanavos | CompositionContainer container; |
70 | 7e39367d | pkanavos | |
71 | 7e39367d | pkanavos | public AppBootstrapper() |
72 | 7e39367d | pkanavos | { |
73 | 7e39367d | pkanavos | LogManager.GetLog = type => new log4netLogger(type); |
74 | 7e39367d | pkanavos | UpgradeSettings(); |
75 | 7e39367d | pkanavos | } |
76 | 7e39367d | pkanavos | |
77 | 7e39367d | pkanavos | private void UpgradeSettings() |
78 | 7e39367d | pkanavos | { |
79 | 7e39367d | pkanavos | if (Settings.Default.MustUpgrade) |
80 | 7e39367d | pkanavos | { |
81 | 7e39367d | pkanavos | Settings.Default.HashingParallelism = (byte) (Environment.ProcessorCount/2); |
82 | 7e39367d | pkanavos | Settings.Default.Upgrade(); |
83 | ac8b664d | pkanavos | Settings.Default.MustUpgrade = false; |
84 | 7e39367d | pkanavos | Settings.Default.Save(); |
85 | 7e39367d | pkanavos | } |
86 | 7e39367d | pkanavos | } |
87 | 7e39367d | pkanavos | |
88 | 6b816c1f | pkanavos | protected override IEnumerable<System.Reflection.Assembly> SelectAssemblies() |
89 | 6b816c1f | pkanavos | { |
90 | 6b816c1f | pkanavos | var assemblies= base.SelectAssemblies(); |
91 | 6b816c1f | pkanavos | return assemblies.Union(new[] |
92 | 6b816c1f | pkanavos | { |
93 | 6b816c1f | pkanavos | typeof(PithosMonitor).Assembly, |
94 | 6b816c1f | pkanavos | typeof(CloudFilesClient).Assembly, |
95 | 6b816c1f | pkanavos | typeof (OFM.FileManagerViewModel).Assembly |
96 | 6b816c1f | pkanavos | }); |
97 | 6b816c1f | pkanavos | } |
98 | 6b816c1f | pkanavos | |
99 | 7e39367d | pkanavos | /// <summary> |
100 | 7e39367d | pkanavos | /// By default, we are configured to use MEF |
101 | 7e39367d | pkanavos | /// </summary> |
102 | 7e39367d | pkanavos | protected override void Configure() { |
103 | 7e39367d | pkanavos | var catalog = new AggregateCatalog( |
104 | 7e39367d | pkanavos | AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType<ComposablePartCatalog>() |
105 | 7e39367d | pkanavos | ); |
106 | 7e39367d | pkanavos | |
107 | 6b816c1f | pkanavos | /*Type[] types = { typeof(PithosMonitor), typeof(CloudFilesClient),typeof(OFM.FileManagerViewModel) }; |
108 | 7e39367d | pkanavos | foreach (var type in types) |
109 | 7e39367d | pkanavos | { |
110 | 7e39367d | pkanavos | catalog.Catalogs.Add(new AssemblyCatalog(type.Assembly)); |
111 | 7e39367d | pkanavos | } |
112 | 6b816c1f | pkanavos | */ |
113 | 7e39367d | pkanavos | container = new CompositionContainer(catalog,true); |
114 | 7e39367d | pkanavos | |
115 | 7e39367d | pkanavos | var batch = new CompositionBatch(); |
116 | 7e39367d | pkanavos | |
117 | 7e39367d | pkanavos | batch.AddExportedValue<IWindowManager>(new WindowManager()); |
118 | 7e39367d | pkanavos | batch.AddExportedValue<IEventAggregator>(new EventAggregator()); |
119 | 7e39367d | pkanavos | batch.AddExportedValue(container); |
120 | 7e39367d | pkanavos | batch.AddExportedValue(catalog); |
121 | 7e39367d | pkanavos | |
122 | 7e39367d | pkanavos | |
123 | 7e39367d | pkanavos | container.Compose(batch); |
124 | 7e39367d | pkanavos | |
125 | 7e39367d | pkanavos | ConventionManager.AddElementConvention<MenuItem>(ItemsControl.ItemsSourceProperty, "DataContext", "Click"); |
126 | 7e39367d | pkanavos | ConventionManager.AddElementConvention<IntegerUpDown>(IntegerUpDown.ValueProperty, "Value", "ValueChanged"); |
127 | 7e39367d | pkanavos | ConventionManager.AddElementConvention<BusyIndicator>(BusyIndicator.IsBusyProperty, "IsBusy", "DataContextChanged"); |
128 | 7e39367d | pkanavos | } |
129 | 7e39367d | pkanavos | |
130 | 7e39367d | pkanavos | protected override object GetInstance(Type serviceType, string key) |
131 | 7e39367d | pkanavos | { |
132 | 7e39367d | pkanavos | string contract = string.IsNullOrEmpty(key) ? AttributedModelServices.GetContractName(serviceType) : key; |
133 | 7e39367d | pkanavos | var exports = container.GetExportedValues<object>(contract); |
134 | 7e39367d | pkanavos | |
135 | 7e39367d | pkanavos | if (exports.Any()) |
136 | 7e39367d | pkanavos | return exports.First(); |
137 | 7e39367d | pkanavos | |
138 | 7e39367d | pkanavos | throw new Exception(string.Format("Could not locate any instances of contract {0}.", contract)); |
139 | 7e39367d | pkanavos | } |
140 | 7e39367d | pkanavos | |
141 | 7e39367d | pkanavos | protected override IEnumerable<object> GetAllInstances(Type serviceType) |
142 | 7e39367d | pkanavos | { |
143 | 7e39367d | pkanavos | return container.GetExportedValues<object>(AttributedModelServices.GetContractName(serviceType)); |
144 | 7e39367d | pkanavos | } |
145 | 7e39367d | pkanavos | |
146 | 7e39367d | pkanavos | protected override void BuildUp(object instance) |
147 | 7e39367d | pkanavos | { |
148 | 7e39367d | pkanavos | container.SatisfyImportsOnce(instance); |
149 | 7e39367d | pkanavos | } |
150 | 7e39367d | pkanavos | } |
151 | 100379b3 | George Pantazis | } |