SettingsService works on iOS.

This commit is contained in:
David Britch 2018-01-16 16:00:25 +00:00
parent 1a8215a822
commit a86a11694a
4 changed files with 34 additions and 30 deletions

View File

@ -15,7 +15,6 @@ namespace eShopOnContainers
public partial class App : Application public partial class App : Application
{ {
ISettingsService _settingsService; ISettingsService _settingsService;
bool _useMockServices;
public App() public App()
{ {
@ -30,9 +29,9 @@ namespace eShopOnContainers
private void InitApp() private void InitApp()
{ {
_useMockServices = true;//_settingsService.UseMocks;
ViewModelLocator.RegisterDependencies(_useMockServices);
_settingsService = ViewModelLocator.Resolve<ISettingsService>(); _settingsService = ViewModelLocator.Resolve<ISettingsService>();
if (!_settingsService.UseMocks)
ViewModelLocator.UpdateDependencies(_settingsService.UseMocks);
} }
private Task InitNavigation() private Task InitNavigation()

View File

@ -60,6 +60,9 @@ namespace eShopOnContainers.Core.ViewModels.Base
_container.Register<IOpenUrlService, OpenUrlService>(); _container.Register<IOpenUrlService, OpenUrlService>();
_container.Register<IIdentityService, IdentityService>(); _container.Register<IIdentityService, IdentityService>();
_container.Register<IRequestProvider, RequestProvider>(); _container.Register<IRequestProvider, RequestProvider>();
_container.Register<IDependencyService, Services.Dependency.DependencyService>();
_container.Register<ISettingsService, SettingsService>().AsSingleton();
_container.Register<IFixUriService, FixUriService>().AsSingleton();
_container.Register<ILocationService, LocationService>().AsSingleton(); _container.Register<ILocationService, LocationService>().AsSingleton();
_container.Register<ICatalogService, CatalogMockService>().AsSingleton(); _container.Register<ICatalogService, CatalogMockService>().AsSingleton();
_container.Register<IBasketService, BasketMockService>().AsSingleton(); _container.Register<IBasketService, BasketMockService>().AsSingleton();

View File

@ -35,7 +35,7 @@ namespace eShopOnContainers.Core.ViewModels
_settingsService = settingsService; _settingsService = settingsService;
_locationService = locationService; _locationService = locationService;
_useAzureServices = _settingsService.UseMocks; _useAzureServices = !_settingsService.UseMocks;
_endpoint = _settingsService.UrlBase; _endpoint = _settingsService.UrlBase;
_latitude = double.Parse(_settingsService.Latitude, CultureInfo.CurrentCulture); _latitude = double.Parse(_settingsService.Latitude, CultureInfo.CurrentCulture);
_longitude = double.Parse(_settingsService.Longitude, CultureInfo.CurrentCulture); _longitude = double.Parse(_settingsService.Longitude, CultureInfo.CurrentCulture);

View File

@ -2,7 +2,6 @@
using Foundation; using Foundation;
using eShopOnContainers.Core.Services.Settings; using eShopOnContainers.Core.Services.Settings;
using eShopOnContainers.iOS.Services; using eShopOnContainers.iOS.Services;
using System.Globalization;
[assembly: Xamarin.Forms.Dependency(typeof(SettingsServiceImplementation))] [assembly: Xamarin.Forms.Dependency(typeof(SettingsServiceImplementation))]
namespace eShopOnContainers.iOS.Services namespace eShopOnContainers.iOS.Services
@ -34,7 +33,7 @@ namespace eShopOnContainers.iOS.Services
switch (typeCode) switch (typeCode)
{ {
case TypeCode.Boolean: case TypeCode.Boolean:
defaults.SetString(Convert.ToString(value, CultureInfo.InvariantCulture), key); defaults.SetBool(Convert.ToBoolean(value), key);
break; break;
case TypeCode.String: case TypeCode.String:
defaults.SetString(Convert.ToString(value), key); defaults.SetString(Convert.ToString(value), key);
@ -57,34 +56,37 @@ namespace eShopOnContainers.iOS.Services
T GetValueOrDefaultInternal<T>(string key, T defaultValue = default(T)) T GetValueOrDefaultInternal<T>(string key, T defaultValue = default(T))
{ {
var defaults = GetUserDefaults(); lock (locker)
if (defaults[key] == null)
{ {
return defaultValue; var defaults = GetUserDefaults();
}
var type = typeof(T); if (defaults[key] == null)
if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>)) {
{ return defaultValue;
type = Nullable.GetUnderlyingType(type); }
}
object value = null; var type = typeof(T);
var typeCode = Type.GetTypeCode(type); if (type.IsGenericType && type.GetGenericTypeDefinition() == typeof(Nullable<>))
switch (typeCode) {
{ type = Nullable.GetUnderlyingType(type);
case TypeCode.Boolean: }
value = defaults.BoolForKey(key);
break;
case TypeCode.String:
value = defaults.StringForKey(key);
break;
default:
throw new ArgumentException($"Value of type {typeCode} is unsupported.");
}
return null != value ? (T)value : defaultValue; object value = null;
var typeCode = Type.GetTypeCode(type);
switch (typeCode)
{
case TypeCode.Boolean:
value = defaults.BoolForKey(key);
break;
case TypeCode.String:
value = defaults.StringForKey(key);
break;
default:
throw new ArgumentException($"Value of type {typeCode} is unsupported.");
}
return null != value ? (T)value : defaultValue;
}
} }
#region ISettingsService Implementation #region ISettingsService Implementation