wpf 如何使用MVVMLight SimpleIoc?[已关闭]

ffdz8vbo  于 2022-12-27  发布在  其他
关注(0)|答案(1)|浏览(152)

**已关闭。**此问题不符合Stack Overflow guidelines。当前不接受答案。

我们不允许问题寻求有关书籍、工具、软件库等的推荐。你可以编辑问题,以便可以使用事实和引用来回答问题。
七年前就关门了。
Improve this question
我正在修改我的软件,它有混乱的Messenger.Default(...)位。
是否有任何备忘单可以了解MVVMLight SimpleIoc的使用(而不是一般的IoC描述)?

f87krz0w

f87krz0w1#

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>();  
        } 
    }
}

1.默认情况下,每个对象都是单例对象。要解析一个对象,使其不是单例对象,需要向GetInstance调用传递一个唯一值:

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

1.向接口注册类:

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

1.向接口注册具体对象:

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

1.要注册具体类型:

SimpleIoc.Default.Register<MainViewModel>();

1.要从接口解析对象:

SimpleIoc.Default.GetInstance<IDataService>();

1.要直接解析对象(执行构建和依存关系解析):

SimpleIoc.Default.GetInstance<MainViewModel>();
  1. MVVM使设计时数据处理变得非常简单:
if (ViewModelBase.IsInDesignModeStatic) 
{              
    SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();          
}          
else         
{              
    SimpleIoc.Default.Register<IDataService, DataService>();          
}

如果你在设计时模式下,它会自动注册你的设计时服务,这样当你在VS设计器中工作时,在你的视图模型和视图中保存数据就变得非常容易了。

相关问题