SimpleIoc crib sheet:
-
You register all your interfaces and objects in the 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>(); } } }
-
Every object is a singleton by default. To resolve an object so that it’s not a singleton you need to pass a unique value to the GetInstance call:
SimpleIoc.Default.GetInstance<MainViewModel>(Guid.NewGuid().ToString());
-
To register a class against an interface:
SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
-
To register a concrete object against an interface:
SimpleIoc.Default.Register<IDataService>(myObject);
-
To register a concrete type:
SimpleIoc.Default.Register<MainViewModel>();
-
To resolve an object from an interface:
SimpleIoc.Default.GetInstance<IDataService>();
-
To resolve an object directly (does buildup and dependency resolution):
SimpleIoc.Default.GetInstance<MainViewModel>();
-
MVVM makes doing design-time data really easy:
if (ViewModelBase.IsInDesignModeStatic) { SimpleIoc.Default.Register<IDataService, Design.DesignDataService>(); } else { SimpleIoc.Default.Register<IDataService, DataService>(); }
If you’re in design-time mode it will automatically register your design-time services, making it really easy to have data in your viewmodels and views when working in the VS designer.