c# - 如何使用 MVVMLight SimpleIoc?

标签 c# wpf inversion-of-control mvvm-light windows-store-apps

<分区>

我正在改造我的软件,它有凌乱的 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 中拥有数据变得非常容易。

希望这对您有所帮助。

关于c# - 如何使用 MVVMLight SimpleIoc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13795596/

相关文章:

c# - 锁定服务器场 (asp.net)

wpf - TreeView 与 MVVM 中的动态 ContextMenu

c# - 如何在 xaml 中访问 Collection 中的基本数据上下文

c# - Entity Framework 同时根据2列排序

c# - 涉及属性类型的库中 DI 的最佳实践

c# - 与 Autofac 最相似的 Java IoC 容器

c# - 使用 Unity 填充集合的方法

silverlight - 哪些 IoC 容器支持 Silverlight?

c# - 如何使用具有负载平衡和有限并行度的任务并行库 (TPL)?

c# - 防止 C# 语音合成器在按钮单击事件上重复自身