| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 | 
							- namespace Caliburn.Micro {
 
-     using Caliburn.Micro.Core;
 
-     using System;
 
-     using System.Collections.Generic;
 
-     using System.Linq;
 
-     using System.Reflection;
 
-     using System.Windows;
 
-     using System.Windows.Threading;
 
-     /// <summary>
 
-     /// Inherit from this class in order to customize the configuration of the framework.
 
-     /// </summary>
 
-     public abstract class BootstrapperBase {
 
-         readonly bool useApplication;
 
-         bool isInitialized;
 
-         /// <summary>
 
-         /// The application.
 
-         /// </summary>
 
-         protected Application Application { get; set; }
 
-         /// <summary>
 
-         /// Creates an instance of the bootstrapper.
 
-         /// </summary>
 
-         /// <param name="useApplication">Set this to false when hosting Caliburn.Micro inside and Office or WinForms application. The default is true.</param>
 
-         protected BootstrapperBase(bool useApplication = true) {
 
-             this.useApplication = useApplication;
 
-         }
 
-         /// <summary>
 
-         /// Initialize the framework.
 
-         /// </summary>
 
-         public void Initialize() {
 
-             if(isInitialized) {
 
-                 return;
 
-             }
 
-             isInitialized = true;
 
-             PlatformProvider.Current = new XamlPlatformProvider();
 
- #if WP8 || NET45
 
-             var baseExtractTypes = AssemblySourceCache.ExtractTypes;
 
-             AssemblySourceCache.ExtractTypes = assembly =>
 
-             {
 
-                 var baseTypes = baseExtractTypes(assembly);
 
-                 var elementTypes = assembly.GetExportedTypes()
 
-                     .Where(t => typeof(UIElement).IsAssignableFrom(t));
 
-                 return baseTypes.Union(elementTypes);
 
-             };
 
-             AssemblySource.Instance.Refresh();
 
- #endif
 
-             if(Execute.InDesignMode) {
 
-                 try {
 
-                     StartDesignTime();
 
-                 }catch {
 
-                     //if something fails at design-time, there's really nothing we can do...
 
-                     isInitialized = false;
 
-                     throw;
 
-                 }
 
-             }
 
-             else {
 
-                 StartRuntime();
 
-             }
 
-         }
 
-         /// <summary>
 
-         /// Called by the bootstrapper's constructor at design time to start the framework.
 
-         /// </summary>
 
-         protected virtual void StartDesignTime() {
 
-             AssemblySource.Instance.Clear();
 
-             AssemblySource.Instance.AddRange(SelectAssemblies());
 
-             Configure();
 
-             IoC.GetInstance = GetInstance;
 
-             IoC.GetAllInstances = GetAllInstances;
 
-             IoC.BuildUp = BuildUp;
 
-         }
 
-         /// <summary>
 
-         /// Called by the bootstrapper's constructor at runtime to start the framework.
 
-         /// </summary>
 
-         protected virtual void StartRuntime() {
 
-             EventAggregator.HandlerResultProcessing = (target, result) => {
 
-                 var task = result as System.Threading.Tasks.Task;
 
-                 if (task != null) {
 
-                     result = new IResult[] {task.AsResult()};
 
-                 }
 
-                 var coroutine = result as IEnumerable<IResult>;
 
-                 if (coroutine != null) {
 
-                     var viewAware = target as IViewAware;
 
-                     var view = viewAware != null ? viewAware.GetView() : null;
 
-                     var context = new CoroutineExecutionContext { Target = target, View = view };
 
-                     Coroutine.BeginExecute(coroutine.GetEnumerator(), context);
 
-                 }
 
-             };
 
-             AssemblySourceCache.Install();
 
-             AssemblySource.Instance.AddRange(SelectAssemblies());
 
-             if (useApplication) {
 
-                 Application = Application.Current;
 
-                 PrepareApplication();
 
-             }
 
-             Configure();
 
-             IoC.GetInstance = GetInstance;
 
-             IoC.GetAllInstances = GetAllInstances;
 
-             IoC.BuildUp = BuildUp;
 
-         }
 
-         /// <summary>
 
-         /// Provides an opportunity to hook into the application object.
 
-         /// </summary>
 
-         protected virtual void PrepareApplication() {
 
-             Application.Startup += OnStartup;
 
- #if SILVERLIGHT
 
-             Application.UnhandledException += OnUnhandledException;
 
- #else
 
-             Application.DispatcherUnhandledException += OnUnhandledException;
 
- #endif
 
-             Application.Exit += OnExit;
 
-         }
 
-         /// <summary>
 
-         /// Override to configure the framework and setup your IoC container.
 
-         /// </summary>
 
-         protected virtual void Configure() { }
 
-         /// <summary>
 
-         /// Override to tell the framework where to find assemblies to inspect for views, etc.
 
-         /// </summary>
 
-         /// <returns>A list of assemblies to inspect.</returns>
 
-         protected virtual IEnumerable<Assembly> SelectAssemblies() {
 
-             return new[] { GetType().Assembly };
 
-         }
 
-         /// <summary>
 
-         /// Override this to provide an IoC specific implementation.
 
-         /// </summary>
 
-         /// <param name="service">The service to locate.</param>
 
-         /// <param name="key">The key to locate.</param>
 
-         /// <returns>The located service.</returns>
 
-         protected virtual object GetInstance(Type service, string key) {
 
- #if NET
 
-             if (service == typeof(IWindowManager))
 
-                 service = typeof(WindowManager);
 
- #endif
 
-             return Activator.CreateInstance(service);
 
-         }
 
-         /// <summary>
 
-         /// Override this to provide an IoC specific implementation
 
-         /// </summary>
 
-         /// <param name="service">The service to locate.</param>
 
-         /// <returns>The located services.</returns>
 
-         protected virtual IEnumerable<object> GetAllInstances(Type service) {
 
-             return new[] { Activator.CreateInstance(service) };
 
-         }
 
-         /// <summary>
 
-         /// Override this to provide an IoC specific implementation.
 
-         /// </summary>
 
-         /// <param name="instance">The instance to perform injection on.</param>
 
-         protected virtual void BuildUp(object instance) { }
 
-         /// <summary>
 
-         /// Override this to add custom behavior to execute after the application starts.
 
-         /// </summary>
 
-         /// <param name="sender">The sender.</param>
 
-         /// <param name="e">The args.</param>
 
-         protected virtual void OnStartup(object sender, StartupEventArgs e) { }
 
-         /// <summary>
 
-         /// Override this to add custom behavior on exit.
 
-         /// </summary>
 
-         /// <param name="sender">The sender.</param>
 
-         /// <param name="e">The event args.</param>
 
-         protected virtual void OnExit(object sender, EventArgs e) { }
 
- #if SILVERLIGHT
 
-         /// <summary>
 
-         /// Override this to add custom behavior for unhandled exceptions.
 
-         /// </summary>
 
-         /// <param name="sender">The sender.</param>
 
-         /// <param name="e">The event args.</param>
 
-         protected virtual void OnUnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e) { }
 
- #else
 
-         /// <summary>
 
-         /// Override this to add custom behavior for unhandled exceptions.
 
-         /// </summary>
 
-         /// <param name="sender">The sender.</param>
 
-         /// <param name="e">The event args.</param>
 
-         protected virtual void OnUnhandledException(object sender, DispatcherUnhandledExceptionEventArgs e) { }
 
- #endif
 
-             
 
- #if SILVERLIGHT && !WINDOWS_PHONE
 
-         /// <summary>
 
-         /// Locates the view model, locates the associate view, binds them and shows it as the root view.
 
-         /// </summary>
 
-         /// <param name="viewModelType">The view model type.</param>
 
-         protected void DisplayRootViewFor(Type viewModelType) {
 
-             var viewModel = IoC.GetInstance(viewModelType, null);
 
-             var view = ViewLocator.LocateForModel(viewModel, null, null);
 
-             ViewModelBinder.Bind(viewModel, view, null);
 
-             var activator = viewModel as IActivate;
 
-             if(activator != null)
 
-                 activator.Activate();
 
-             Mouse.Initialize(view);
 
-             Application.RootVisual = view;
 
-         }
 
-         /// <summary>
 
-         /// Locates the view model, locates the associate view, binds them and shows it as the root view.
 
-         /// </summary>
 
-         /// <typeparam name="TViewModel">The view model type.</typeparam>
 
-         protected void DisplayRootViewFor<TViewModel>() {
 
-             DisplayRootViewFor(typeof(TViewModel));
 
-         }
 
- #elif NET 
 
-         /// <summary>
 
-         /// Locates the view model, locates the associate view, binds them and shows it as the root view.
 
-         /// </summary>
 
-         /// <param name="viewModelType">The view model type.</param>
 
-         /// <param name="settings">The optional window settings.</param>
 
-         protected void DisplayRootViewFor(Type viewModelType, IDictionary<string, object> settings = null) {
 
-             var windowManager = IoC.Get<IWindowManager>();
 
-             windowManager.ShowWindow(IoC.GetInstance(viewModelType, null), null, settings);
 
-         }
 
-         /// <summary>
 
-         /// Locates the view model, locates the associate view, binds them and shows it as the root view.
 
-         /// </summary>
 
-         /// <typeparam name="TViewModel">The view model type.</typeparam>
 
-         /// <param name="settings">The optional window settings.</param>
 
-         protected void DisplayRootViewFor<TViewModel>(IDictionary<string, object> settings = null) {
 
-             DisplayRootViewFor(typeof(TViewModel), settings);
 
-         }
 
- #endif
 
-     }
 
- }
 
 
  |