一尘不染

如何使用MVVMLight SimpleIoc?[关闭]

c#

我正在对软件进行升级,该软件有些混乱Messenger.Default(...)

是否有任何备忘单来了解MVVMLight SimpleIoc的用法(不是一般的IoC描述)?


阅读 335

收藏
2020-05-19

共1个答案

一尘不染

SimpleIoc婴儿床床单:

1)您在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)默认情况下,每个对象都是单例。要解析对象以使其不是单例,您需要将唯一值传递给GetInstance调用:

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

3)要针对接口注册类:

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

4)要针对接口注册具体对象:

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

5)要注册具体类型:

SimpleIoc.Default.Register<MainViewModel>();

6)要从接口解析对象:

SimpleIoc.Default.GetInstance<IDataService>();

7)直接解析对象(建立和依赖关系解析):

SimpleIoc.Default.GetInstance<MainViewModel>();

8)MVVM使设计时数据的确非常容易:

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

如果您处于设计时模式,它将自动注册您的设计时服务,这使得在VS设计器中工作时在视图模型和视图中存储数据变得非常容易。

希望这可以帮助。

2020-05-19