using Castle.Facilities.TypedFactory; using Castle.MicroKernel.Registration; using Castle.Windsor; using Stylet; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace Bootstrappers { public class CastleWindsorBootstrapper : BootstrapperBase where TRootViewModel : class { private IWindsorContainer container; protected override void ConfigureBootstrapper() { this.Configure(); this.container = new WindsorContainer(); this.DefaultConfigureIoC(this.container); this.ConfigureIoC(this.container); } /// /// Override to configure your IoC container, and anything else /// protected virtual void Configure() { } /// /// Carries out default configuration of the IoC container. Override if you don't want to do this /// protected virtual void DefaultConfigureIoC(IWindsorContainer container) { container.AddFacility(); container.Register( Component.For().Instance(this), Component.For().ImplementedBy().LifestyleSingleton(), Component.For().ImplementedBy().LifestyleSingleton(), Component.For().ImplementedBy().LifestyleSingleton(), Component.For().ImplementedBy().LifestyleTransient() ); foreach (var assembly in this.Assemblies) { container.Register(Classes.FromAssembly(assembly).Pick().LifestyleTransient()); } } /// /// Override to add your own types to the IoC container. /// protected virtual void ConfigureIoC(IWindsorContainer container) { } public override object GetInstance(Type type) { return this.container.Resolve(type); } } }