/// <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);
        }
示例#2
0
        /// <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);
        }