how to use MVVMLight SimpleIoc?

C#WpfInversion of-ControlMvvm LightWindows Store-Apps

C# Problem Overview


I'm revamping my software which has messy Messenger.Default(...) bits.

Is there any cheat sheet to know MVVMLight SimpleIoc usage (not general IoC description)?

C# Solutions


Solution 1 - C#

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();
    }
    else
    {
    SimpleIoc.Default.Register();
    }
    SimpleIoc.Default.Register();
    SimpleIoc.Default.Register(); }

     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(Guid.NewGuid().ToString());

  3. To register a class against an interface:

    SimpleIoc.Default.Register();

  4. To register a concrete object against an interface:

    SimpleIoc.Default.Register(myObject);

  5. To register a concrete type:

    SimpleIoc.Default.Register();

  6. To resolve an object from an interface:

    SimpleIoc.Default.GetInstance();

  7. To resolve an object directly (does buildup and dependency resolution):

    SimpleIoc.Default.GetInstance();

  8. MVVM makes doing design-time data really easy:

    if (ViewModelBase.IsInDesignModeStatic) {
    SimpleIoc.Default.Register();
    }
    else
    {
    SimpleIoc.Default.Register();
    }

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.

Hope this helps.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionYoungjaeView Question on Stackoverflow
Solution 1 - C#Faster SolutionsView Answer on Stackoverflow