Я использую ядро ninject как локатор viewmodel в приложении WPF.Использование ninject в качестве локатора режима просмотра WPF - viewmodels as singletons
Хелпер ядро класса:
public static class IoCKernel
{
private static IKernel kernel;
public static void Init(params NinjectModule[] modules)
{
if (kernel == null)
{
kernel = new StandardKernel(modules);
}
}
public static T Get<T>()
{
return kernel.Get<T>();
}
}
И ViewModelLocator
выставляет Get
метод, как:
public class ViewModelLocator : IViewModelLocator
{
public MainWindowViewModel MainWindowViewModel
{
get
{
return IoCKernel.Get<MainWindowViewModel>();
}
}
}
И когда экземпляр нужно, это называется как:
IoCKernel.Get<IViewModelLocator>().MainWindowViewModel;
Однако, IoCKernel.Get<MainWindowViewModel>()
всегда будет возвращать новый i nstance. Есть ли способ заставить его работать только с одним экземпляром?
Одним из незначительных улучшений я бы предложил исходный код: он использует статический класс в качестве оболочки для ядра. Если вы измените это на обычный класс, который реализует интерфейс, вы можете связать этот интерфейс с реализацией с помощью InSingletonScope и ввести инжектор в классы, которые в нем нуждаются. –