#region /* ----------------------------------------------------------------------- * * * Copyright 2011-2012 GRNET S.A. All rights reserved. * * Redistribution and use in source and binary forms, with or * without modification, are permitted provided that the following * conditions are met: * * 1. Redistributions of source code must retain the above * copyright notice, this list of conditions and the following * disclaimer. * * 2. Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials * provided with the distribution. * * * THIS SOFTWARE IS PROVIDED BY GRNET S.A. ``AS IS'' AND ANY EXPRESS * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GRNET S.A OR * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * * The views and conclusions contained in the software and * documentation are those of the authors and should not be * interpreted as representing official policies, either expressed * or implied, of GRNET S.A. * * ----------------------------------------------------------------------- */ #endregion using System.Windows; using System.Windows.Controls; using System.Windows.Navigation; using Caliburn.Micro; using Caliburn.Micro.Logging; using Microsoft.Windows.Controls; using Pithos.Client.WPF.Properties; using Pithos.Core; using Pithos.Network; using log4net.Appender; using log4net.Config; using log4net.Filter; using log4net.Layout; namespace Pithos.Client.WPF { using System; using System.Collections.Generic; using System.ComponentModel.Composition; using System.ComponentModel.Composition.Hosting; using System.ComponentModel.Composition.Primitives; using System.Linq; using Caliburn.Micro; public class AppBootstrapper : Bootstrapper { CompositionContainer container; public AppBootstrapper() { LogManager.GetLog = type => new log4netLogger(type); UpgradeSettings(); } private void UpgradeSettings() { if (Settings.Default.MustUpgrade) { Settings.Default.Upgrade(); Settings.Default.MustUpgrade = false; Settings.Default.Save(); } } /// /// By default, we are configured to use MEF /// protected override void Configure() { var catalog = new AggregateCatalog( AssemblySource.Instance.Select(x => new AssemblyCatalog(x)).OfType() ); Type[] types = { typeof(PithosMonitor), typeof(CloudFilesClient) }; foreach (var type in types) { catalog.Catalogs.Add(new AssemblyCatalog(type.Assembly)); } container = new CompositionContainer(catalog,true); var batch = new CompositionBatch(); batch.AddExportedValue(new WindowManager()); batch.AddExportedValue(new EventAggregator()); batch.AddExportedValue(container); batch.AddExportedValue(catalog); container.Compose(batch); ConventionManager.AddElementConvention(ItemsControl.ItemsSourceProperty, "DataContext", "Click"); ConventionManager.AddElementConvention(IntegerUpDown.ValueProperty, "Value", "ValueChanged"); ConventionManager.AddElementConvention(BusyIndicator.IsBusyProperty, "IsBusy", "DataContextChanged"); } protected override object GetInstance(Type serviceType, string key) { string contract = string.IsNullOrEmpty(key) ? AttributedModelServices.GetContractName(serviceType) : key; var exports = container.GetExportedValues(contract); if (exports.Any()) return exports.First(); throw new Exception(string.Format("Could not locate any instances of contract {0}.", contract)); } protected override IEnumerable GetAllInstances(Type serviceType) { return container.GetExportedValues(AttributedModelServices.GetContractName(serviceType)); } protected override void BuildUp(object instance) { container.SatisfyImportsOnce(instance); } } }