首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用MVVMLight SimpleIoc?

如何使用MVVMLight SimpleIoc?
EN

Stack Overflow用户
提问于 2012-12-10 13:37:59
回答 1查看 46.2K关注 0票数 59

我正在修改我的软件,它有一些凌乱的Messenger.Default(...)位。

有没有什么小抄可以知道MVVMLight SimpleIoc的用法(不是一般的IoC描述)?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-11 00:32:56

SimpleIoc小抄:

1)在ViewModelLocator中注册所有接口和对象

代码语言:javascript
复制
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调用传递一个唯一的值:

代码语言:javascript
复制
SimpleIoc.Default.GetInstance<MainViewModel>(Guid.NewGuid().ToString());

3)根据接口注册类:

代码语言:javascript
复制
SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();  

4)根据接口注册一个具体的对象:

代码语言:javascript
复制
SimpleIoc.Default.Register<IDataService>(myObject);     

5)注册具体类型:

代码语言:javascript
复制
SimpleIoc.Default.Register<MainViewModel>();   

6)从接口解析对象:

代码语言:javascript
复制
SimpleIoc.Default.GetInstance<IDataService>();

7)直接解析对象(进行构建和依赖解析):

代码语言:javascript
复制
SimpleIoc.Default.GetInstance<MainViewModel>();

8) MVVM使得处理设计时数据变得非常容易:

代码语言:javascript
复制
if (ViewModelBase.IsInDesignModeStatic) 
{              
    SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();          
}          
else         
{              
    SimpleIoc.Default.Register<IDataService, DataService>();          
}  

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

希望这能有所帮助。

票数 144
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13795596

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档