Statistics
| Branch: | Revision:

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
}