SimpleIoc به صورت پیش فرض در پروژه های MVVM Light موجود میباشد. قطعه کد پایین به صورت پیش فرض در پروژههای MVVM Lightایجاد میشود.
در کلاس ViewModelLocator ما تمام میانجی(Interface)ها و اشیا(Objects)ی مورد نیازمان را ثبت(register) میکنیم.
در ادامه اجزای مختلف آن را شرح میدهیم.
1) هر شیء که به صورت پیش فرض ایجاد میشود با الگوی Singlton ایجاد میشود.
2) جهت ثبت یک کلاس مرتبط با میانجی آن از روش زیر استفاده میشود.
3) جهت ثبت یک شی مرتبط با میانجی از روش زیر استفاده میشود.
4) جهت ثبت یک نوع (Type) به طریق زیر عمل میکنیم.
5) جهت گرفتن وهله (Instance) از یک میانجی خاص، از روش زیر استفاده میکنیم.
6) جهت گرفتن وهله ای به صورت مستقیم، 'ایجاد و وضوح وابستگی(dependency resolution)' از روش زیر استفاد میکنیم.
7) برای ایجاد دادههای زمان طراحی از روش زیر استفاده میکنیم.
در حالت زمان طراحی، سرویسهای زمان طراحی به صورت خودکار ثبت میشوند. و میتوان این دادهها را در ViewModelها و Viewها حین طراحی مشاهده نمود.
منبع
در کلاس ViewModelLocator ما تمام میانجی(Interface)ها و اشیا(Objects)ی مورد نیازمان را ثبت(register) میکنیم.
در ادامه اجزای مختلف آن را شرح میدهیم.
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) هر شیء که به صورت پیش فرض ایجاد میشود با الگوی Singlton ایجاد میشود.
SimpleIoc.Default.GetInstance<MainViewModel>(Guid.NewGuid().ToString());
SimpleIoc.Default.Register<IDataService, Design.DesignDataService>();
SimpleIoc.Default.Register<IDataService>(myObject);
SimpleIoc.Default.Register<MainViewModel>();
SimpleIoc.Default.GetInstance<IDataService>();
SimpleIoc.Default.GetInstance();
if (ViewModelBase.IsInDesignModeStatic) { SimpleIoc.Default.Register<IDataService, Design.DesignDataService>(); } else { SimpleIoc.Default.Register<IDataService, DataService>(); }
منبع