using System;
using Ninject;
using Ninject.Activation;
using Ninject.Modules;
using Nuclex.Windows.Forms.AutoBinding;
namespace Nuclex.Windows.Forms.Ninject {
/// Sets up the service bindings for an MVVM-based WPF application
public class MvvmModule : NinjectModule {
/// Called when the module is loaded into the kernel
public override void Load() {
// The window manager keeps track of active windows and can figure out
// which window to display for a view model by its naming convention.
Kernel.Bind().To().InSingletonScope();
Kernel.Bind().ToMethod(getWindowManager).InSingletonScope();
Kernel.Bind().ToMethod(getWindowManager).InSingletonScope();
Kernel.Bind().ToMethod(CreateAutoBinder).InSingletonScope();
}
/// Creates and initializd the auto view model binder
///
/// Context containing environmental informations about the request and the kernel
///
/// The view model auto binder that will be used by the application
protected virtual IAutoBinder CreateAutoBinder(IContext context) {
return new ConventionBinder();
}
/// Retrieves the window manager from the kernel
///
/// Context containing environmental informations about the request and the kernel
///
/// The window manager registered to the kernel
private static WindowManager getWindowManager(IContext context) {
return context.Kernel.Get();
}
}
} // namespace Nuclex.Windows.Forms.Ninject