mvvmlightlibs c# wpf inversion-of-control mvvm-light windows-store-apps

c# - mvvmlightlibs - mvvm light wpf



cómo usar MVVMLight SimpleIoc? (1)

Estoy renovando mi software que tiene Messenger.Default(...) bits desordenados.

¿Hay alguna hoja de referencia para conocer el uso de MVVMLight Simple Ioc (no descripción general de IoC)?


Hoja de cuna SimpleIoc:

1) Registra todas sus interfaces y objetos en ViewModelLocator

class ViewModelLocator { static ViewModelLocator() { ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); if (ViewModelBase.IsInDesignModeStatic) { SimpleIoc.Default.Register<IDataService, Design.DesignDataService>(); } else { SimpleIoc.Default.Register<IDataService, DataService>(); } SimpleIoc.Default.Register<MainViewModel>(); SimpleIoc.Default.Register<SecondViewModel>(); } public MainViewModel Main { get { return ServiceLocator.Current.GetInstance<MainViewModel>(); } } }

2) Cada objeto es un singleton por defecto. Para resolver un objeto para que no sea un singleton, debe pasar un valor único a la llamada GetInstance:

SimpleIoc.Default.GetInstance<MainViewModel>(Guid.NewGuid().ToString());

3) Para registrar una clase contra una interfaz:

SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();

4) Para registrar un objeto concreto contra una interfaz:

SimpleIoc.Default.Register<IDataService>(myObject);

5) Para registrar un tipo concreto:

SimpleIoc.Default.Register<MainViewModel>();

6) Para resolver un objeto desde una interfaz:

SimpleIoc.Default.GetInstance<IDataService>();

7) Para resolver un objeto directamente (¿acumulación y resolución de dependencia):

SimpleIoc.Default.GetInstance<MainViewModel>();

8) MVVM hace que los datos de tiempo de diseño sean realmente fáciles:

if (ViewModelBase.IsInDesignModeStatic) { SimpleIoc.Default.Register<IDataService, Design.DesignDataService>(); } else { SimpleIoc.Default.Register<IDataService, DataService>(); }

Si está en el modo de tiempo de diseño, registrará automáticamente sus servicios en tiempo de diseño, lo que facilitará la disponibilidad de datos en sus modelos de vista y vistas cuando trabaje en el diseñador de VS.

Espero que esto ayude.