mirror of https://github.com/AMT-Cheif/Stylet.git
80 lines
2.7 KiB
C#
80 lines
2.7 KiB
C#
using Autofac;
|
|
using Microsoft.Extensions.DependencyInjection;
|
|
using Stylet;
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Reflection;
|
|
|
|
namespace Bootstrappers
|
|
{
|
|
public class MicrosoftDependencyInjectionBootstrapper<TRootViewModel> : BootstrapperBase where TRootViewModel : class
|
|
{
|
|
private ServiceProvider serviceProvider;
|
|
|
|
private TRootViewModel _rootViewModel;
|
|
protected virtual TRootViewModel RootViewModel
|
|
{
|
|
get { return this._rootViewModel ?? (this._rootViewModel = (TRootViewModel)this.GetInstance(typeof(TRootViewModel))); }
|
|
}
|
|
|
|
public IServiceProvider ServiceProvider
|
|
{
|
|
get { return this.serviceProvider; }
|
|
}
|
|
|
|
protected override void ConfigureBootstrapper()
|
|
{
|
|
var services = new ServiceCollection();
|
|
this.DefaultConfigureIoC(services);
|
|
this.ConfigureIoC(services);
|
|
this.serviceProvider = services.BuildServiceProvider();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Carries out default configuration of the IoC container. Override if you don't want to do this
|
|
/// </summary>
|
|
protected virtual void DefaultConfigureIoC(IServiceCollection services)
|
|
{
|
|
var viewManagerConfig = new ViewManagerConfig()
|
|
{
|
|
ViewFactory = this.GetInstance,
|
|
ViewAssemblies = new List<Assembly>() { this.GetType().Assembly }
|
|
};
|
|
|
|
services.AddSingleton<IViewManager>(new ViewManager(viewManagerConfig));
|
|
services.AddTransient<MessageBoxView>();
|
|
|
|
services.AddSingleton<IWindowManagerConfig>(this);
|
|
services.AddSingleton<IWindowManager, WindowManager>();
|
|
services.AddSingleton<IEventAggregator, EventAggregator>();
|
|
services.AddTransient<IMessageBoxViewModel, MessageBoxViewModel>(); // Not singleton!
|
|
// Also need a factory
|
|
services.AddSingleton<Func<IMessageBoxViewModel>>(() => new MessageBoxViewModel());
|
|
}
|
|
|
|
/// <summary>
|
|
/// Override to add your own types to the IoC container.
|
|
/// </summary>
|
|
protected virtual void ConfigureIoC(IServiceCollection services) { }
|
|
|
|
public override object GetInstance(Type type)
|
|
{
|
|
return this.serviceProvider.GetRequiredService(type);
|
|
}
|
|
|
|
protected override void Launch()
|
|
{
|
|
base.DisplayRootView(this.RootViewModel);
|
|
}
|
|
|
|
public override void Dispose()
|
|
{
|
|
base.Dispose();
|
|
|
|
ScreenExtensions.TryDispose(this._rootViewModel);
|
|
if (this.serviceProvider != null)
|
|
this.serviceProvider.Dispose();
|
|
}
|
|
}
|
|
}
|