using System; using Artemis.UI.Ninject.Factories; using Artemis.UI.Ninject.InstanceProviders; using Artemis.UI.Screens; using Artemis.UI.Screens.ProfileEditor; using Artemis.UI.Screens.Splash; using Artemis.UI.Services; using Artemis.UI.Shared.Services; using Artemis.UI.Stylet; using FluentValidation; using Ninject.Extensions.Conventions; using Ninject.Extensions.Factory; using Ninject.Modules; using Ninject.Planning.Bindings.Resolvers; using Stylet; namespace Artemis.UI.Ninject { public class UIModule : NinjectModule { public override void Load() { if (Kernel == null) throw new ArgumentNullException("Kernel shouldn't be null here."); Kernel.Components.Add(); Kernel.Bind().ToSelf().InSingletonScope(); Kernel.Bind().ToSelf(); // Bind all built-in VMs Kernel.Bind(x => { x.FromThisAssembly() .SelectAllClasses() .InheritedFrom() .BindAllBaseClasses() .Configure(c => c.InSingletonScope()); }); // Bind all dialog VMs Kernel.Bind(x => { x.FromThisAssembly() .SelectAllClasses() .InheritedFrom() .BindAllBaseClasses(); }); // Bind UI factories Kernel.Bind(x => { x.FromThisAssembly() .SelectAllInterfaces() .InheritedFrom() .BindToFactory(); }); Kernel.Bind().ToFactory(() => new DataBindingsViewModelInstanceProvider()); Kernel.Bind().ToFactory(() => new LayerPropertyViewModelInstanceProvider()); // Bind profile editor VMs Kernel.Bind(x => { x.FromThisAssembly() .SelectAllClasses() .InheritedFrom() .BindAllBaseClasses(); }); // Bind all UI services as singletons Kernel.Bind(x => { x.FromThisAssembly() .SelectAllClasses() .InheritedFrom() .BindAllInterfaces() .Configure(c => c.InSingletonScope()); }); // Bind all validators Bind(typeof(IModelValidator<>)).To(typeof(FluentValidationAdapter<>)); Kernel.Bind(x => { x.FromThisAssembly() .SelectAllClasses() .InheritedFrom() .BindAllInterfaces(); }); } } }