为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用MVVMLight SimpleIoc?

如何使用MVVMLight SimpleIoc?

C#
潇潇雨雨 2019-11-08 10:31:07
我正在对软件进行升级,该软件有些混乱Messenger.Default(...)。是否有任何备忘单来了解MVVMLight SimpleIoc的用法(不是一般的IoC描述)?
查看完整描述

2 回答

?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

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设计器中工作时在视图模型和视图中存储数据变得非常容易。


希望这可以帮助。


查看完整回答
反对 回复 2019-11-08
?
浮云间

TA贡献1829条经验 获得超4个赞

1)我发现SimpleIoc抛出设计时异常,因为服务已经注册。如果我检查IsRegistered,然后在我的视图模型中引用SimpleIoc,则不会显示设计时数据(不会引发异常,只是不显示)。如果删除SimpleIoc并手动创建数据,那么它将在设计时显示出来。因此,不,我认为这“真的很简单” :)请注意,数据服务在设计时间之外工作良好。

查看完整回答
反对 回复 2019-11-08
  • 2 回答
  • 0 关注
  • 1140 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信