Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。












想改善这个问题吗?更新问题,以便将其作为on-topic用于堆栈溢出。

5年前关闭。



Improve this question




我正在对具有困惑Messenger.Default(...)位的软件进行升级。

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

最佳答案

SimpleIoc婴儿床床单:

1)您在ViewModelLocator中注册了所有接口(interface)和对象

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)要针对接口(interface)注册类:
SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();

4)要针对接口(interface)注册具体对象:
SimpleIoc.Default.Register<IDataService>(myObject);

5)要注册具体类型:
SimpleIoc.Default.Register<MainViewModel>();

6)要从接口(interface)解析对象:
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设计器中工作时在 View 模型和 View 中存储数据变得非常容易。

希望这可以帮助。

10-08 02:58