using System; using Artemis.UI.Ninject.Factories; using Artemis.UI.Screens; using Artemis.UI.Screens.Module.ProfileEditor; using Artemis.UI.Services.Interfaces; using Artemis.UI.Stylet; using Artemis.UI.ViewModels.Dialogs; using FluentValidation; using Ninject.Extensions.Conventions; using Ninject.Extensions.Factory; using Ninject.Modules; using Stylet; namespace Artemis.UI.Ninject { // ReSharper disable once InconsistentNaming public class UIModule : NinjectModule { public override void Load() { if (Kernel == null) throw new ArgumentNullException("Kernel shouldn't be null here."); // Bind all built-in VMs Kernel.Bind(x => { x.FromThisAssembly() .SelectAllClasses() .InheritedFrom() .BindAllInterfaces(); }); // Bind all dialog VMs Kernel.Bind(x => { x.FromThisAssembly() .SelectAllClasses() .InheritedFrom() .BindAllBaseClasses(); }); // Bind UI factories Kernel.Bind(x => { x.FromThisAssembly() .SelectAllClasses() .InheritedFrom() .BindToFactory(); }); Kernel.Bind().ToFactory(); Kernel.Bind().ToFactory(); Kernel.Bind().ToFactory(); // 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(); }); } } }