/// <summary> /// Configures the IOC container /// </summary> /// <param name="registerPlatformDependencies">A callback used to register platform dependencies</param> /// <returns>The interface to the dependency injection facade</returns> public static IDependencyResolver BootStrap(Action <ServiceRegistry> registerPlatformDependencies) { LamarDI dependencyInjectionFacade = new LamarDI(); var registry = new ServiceRegistry(); registry.For <IDependencyResolver>().Use(dependencyInjectionFacade); // Services registry.ForSingletonOf <IDownloadAndInstallService>().Use <DownloadAndInstallService>(); // Platform dependencies registerPlatformDependencies(registry); // View models registry.For <IMainViewModel>().Use <MainViewModel>(); var container = new Container(registry); dependencyInjectionFacade.Initialise(container); DependencyHelper.Container = dependencyInjectionFacade; return(dependencyInjectionFacade); }
/// <summary> /// Create the DI container and register all classes against their interfaces /// </summary> /// <returns>The interface to the DI facade</returns> public IDependencyResolver Startup() { #if __DROID__ // DI Facade LamarDI diFacade = new LamarDI(); var registry = new ServiceRegistry(); registry.For <IDependencyResolver>().Use(diFacade); // Framework registry.ForSingletonOf <IDispatchOnUIThread>().Use <UIDispatcher>(); // View models registry.For <IMainViewModel>().Use <MainViewModel>(); var container = new Container(registry); diFacade.Initialise(container); #elif __WASM__ || NETFX_CORE IUnityContainer container = new UnityContainer(); container.RegisterInstance <IUnityContainer>(container, new ContainerControlledLifetimeManager()); container.RegisterType <IDependencyResolver, UnityDI>(new ContainerControlledLifetimeManager()); // Framework container.RegisterType <IDispatchOnUIThread, UIDispatcher>(new ContainerControlledLifetimeManager()); // View models container.RegisterType <IMainViewModel, MainViewModel>(); var diFacade = container.Resolve <IDependencyResolver>(); #elif __IOS__ var container = new TinyIoCDependencyService(); // DI Facade container.RegisterSingleton <IDependencyResolver>(container); // Framework container.RegisterSingleton <IDispatchOnUIThread, UIDispatcher>(); // View models container.Register <IMainViewModel, MainViewModel>(); var diFacade = container.Resolve <IDependencyResolver>(); #elif __WPF__ var container = new Container(); container.Configure(_ => { // DI Facade _.For <IDependencyResolver>().Singleton().Use(() => new StructureMapDI(container)); // Framework _.For <IDispatchOnUIThread>().Singleton().Use <UIDispatcher>(); // View models _.For <IMainViewModel>().Use <MainViewModel>(); }); var diFacade = container.GetInstance <IDependencyResolver>(); #endif DependencyHelper.Container = diFacade; // ensure the singleton dispatcher is created. diFacade.Resolve <IDispatchOnUIThread>(); return(diFacade); }