Ejemplo n.º 1
0
        protected override void RegisterTypes(IContainerRegistry containerRegistry)
        {
            // Register the Popup Plugin Navigation Service
            containerRegistry.RegisterPopupNavigationService();
            containerRegistry.RegisterInstance(CreateLogger());

#if (UseRealm)
            //var serverURL = new Uri(Secrets.RealmServer);
            //var config = new SyncConfiguration(User.Current, serverURL);
            var config = RealmConfiguration.DefaultConfiguration;
    #if (AutofacContainer)
            containerRegistry.GetBuilder().Register(ctx => Realm.GetInstance(config)).As<Realm>().InstancePerDependency();
    #elseif (DryIocContainer)
            containerRegistry.GetContainer().Register(reuse: Reuse.Transient,
                               made: Made.Of(() => Realm.GetInstance(config)),
                               setup: Setup.With(allowDisposableTransient: true));
    #else
            containerRegistry.GetContainer().RegisterType<Realm>(new InjectionFactory(c => Realm.GetInstance(config)));
    #endif

#endif
#if (UseAzureMobileClient)
            containerRegistry.RegisterSingleton(typeof(ICloudTable<>), typeof(AzureCloudTable<>));
            containerRegistry.RegisterSingleton(typeof(ICloudSyncTable<>), typeof(AzureCloudSyncTable<>));
    #if (NoAuth)
            containerRegistry.RegisterInstance<IMobileServiceClient>(new MobileServiceClient(Secrets.AppServiceEndpoint));
    #else
    #if (AADAuth || AADB2CAuth)
            containerRegistry.RegisterInstance<IPublicClientApplication>(
                new PublicClientApplication(Secrets.AuthClientId, AppConstants.Authority)
                {
                    RedirectUri = AppConstants.RedirectUri
                });

        #if (AutofacContainer)
            containerRegistry.GetBuilder().RegisterType<AppDataContext>().As<IAppDataContext>().As<ICloudAppContext>().SingleInstance();
        #elseif (DryIocContainer)
            containerRegistry.GetContainer().RegisterMany<AppDataContext>(reuse: Reuse.Singleton,
                                                   serviceTypeCondition: type => 
                                                        type == typeof(IAppDataContext) ||
                                                        type == typeof(ICloudAppContext));
        #elseif (NinjectContainer)
            containerRegistry.GetContainer().Bind<IAppDataContext, ICloudAppContext>().To<AppDataContext>().InSingletonScope();
        #elseif (UnityContainer)
            containerRegistry.GetContainer().RegisterType<AppDataContext>(new ContainerControlledLifetimeManager());
            containerRegistry.GetContainer().RegisterType<IAppDataContext>(new InjectionFactory(c => c.Resolve<AppDataContext>()));
            containerRegistry.GetContainer().RegisterType<ICloudAppContext>(new InjectionFactory(c => c.Resolve<AppDataContext>()));
        #endif
    #endif
            containerRegistry.RegisterSingleton<IAzureCloudServiceOptions, AppServiceContextOptions>();
        #if (AutofacContainer)
            containerRegistry.GetBuilder().RegisterType<AppDataContext>().As<IAppDataContext>().As<ICloudService>().SingleInstance();
            containerRegistry.GetBuilder().Register(ctx => ctx.Resolve<ICloudService>().Client).As<IMobileServiceClient>().SingleInstance();
        #elseif (DryIocContainer)
            containerRegistry.GetContainer().RegisterMany<AppDataContext>(reuse: Reuse.Singleton,
                                                   serviceTypeCondition: type => 
                                                        type == typeof(IAppDataContext) ||
                                                        type == typeof(ICloudService));
            containerRegistry.GetContainer().RegisterDelegate<IMobileServiceClient>(factoryDelegate: r => r.Resolve<ICloudService>().Client,
                                                             reuse: Reuse.Singleton,
                                                             setup: Setup.With(allowDisposableTransient: true));
        #elseif (NinjectContainer)
            containerRegistry.Bind<IAppDataContext, ICloudService>().To<AppDataContext>().InSingletonScope();
            containerRegistry.Bind<IMobileServiceClient>().ToMethod(c => containerRegistry.Get<ICloudService>().Client).InSingletonScope();
        #elseif (UnityContainer)
            containerRegistry.GetContainer().RegisterType<IAppDataContext>(new InjectionFactory(c => c.Resolve<AppDataContext>()));
            containerRegistry.GetContainer().RegisterType<ICloudService>(new InjectionFactory(c => c.Resolve<AppDataContext>()));
            containerRegistry.GetContainer().RegisterType<IMobileServiceClient>(new InjectionFactory(c => c.Resolve<ICloudService>().Client));
        #endif

            containerRegistry.RegisterSingleton<ILoginProvider<AADAccount>, LoginProvider>();

#endif
#if (IncludeBarcodeService)
            // NOTE: Uses a Popup Page to contain the Scanner. You can optionally register 
            // the ContentPageBarcodeScannerService if you prefer a full screen approach.
            containerRegistry.RegisterSingleton<IBarcodeScannerService, PopupBarcodeScannerService>();
#endif
#if (UseAcrDialogs)
            containerRegistry.RegisterInstance<IUserDialogs>(UserDialogs.Instance);
#endif

            // Navigating to "TabbedPage?createTab=ViewA&createTab=ViewB&createTab=ViewC will generate a TabbedPage
            // with three tabs for ViewA, ViewB, & ViewC
            // Adding `selectedTab=ViewB` will set the current tab to ViewB
            containerRegistry.RegisterForNavigation<TabbedPage>();
            containerRegistry.RegisterForNavigation<NavigationPage>();
            containerRegistry.RegisterForNavigation<MainPage>();
#if (!Empty)
            containerRegistry.RegisterForNavigation<SplashScreenPage>();
            containerRegistry.RegisterForNavigation<TodoItemDetail>();
#endif
        }