how to use MVVMLight SimpleIoc? [closed]

SimpleIoc crib sheet:

  1. 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>();  
            } 
        }
    }
    
  2. 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());
    
  3. To register a class against an interface:

    SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
    
  4. To register a concrete object against an interface:

    SimpleIoc.Default.Register<IDataService>(myObject);
    
  5. To register a concrete type:

    SimpleIoc.Default.Register<MainViewModel>();
    
  6. To resolve an object from an interface:

    SimpleIoc.Default.GetInstance<IDataService>();
    
  7. To resolve an object directly (does buildup and dependency resolution):

    SimpleIoc.Default.GetInstance<MainViewModel>();
    
  8. 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.

Leave a Comment