Merge pull request #465 from dotnet-architecture/xamarin-tinyioc
Replace Autofac with TinyIoC in the mobile app
This commit is contained in:
commit
d2e27b770a
@ -14,14 +14,11 @@ namespace eShopOnContainers
|
||||
{
|
||||
public partial class App : Application
|
||||
{
|
||||
public bool UseMockServices { get; set; }
|
||||
|
||||
public App()
|
||||
{
|
||||
InitializeComponent();
|
||||
|
||||
InitApp();
|
||||
|
||||
if (Device.RuntimePlatform == Device.UWP)
|
||||
{
|
||||
InitNavigation();
|
||||
@ -30,8 +27,9 @@ namespace eShopOnContainers
|
||||
|
||||
private void InitApp()
|
||||
{
|
||||
UseMockServices = Settings.UseMocks;
|
||||
ViewModelLocator.RegisterDependencies(UseMockServices);
|
||||
bool useMockServices = Settings.UseMocks;
|
||||
if (!useMockServices)
|
||||
ViewModelLocator.UpdateDependencies(useMockServices);
|
||||
}
|
||||
|
||||
private Task InitNavigation()
|
||||
|
4303
src/Mobile/eShopOnContainers/eShopOnContainers.Core/TinyIoC/TinyIoC.cs
Executable file
4303
src/Mobile/eShopOnContainers/eShopOnContainers.Core/TinyIoC/TinyIoC.cs
Executable file
File diff suppressed because it is too large
Load Diff
@ -1,5 +1,4 @@
|
||||
using Autofac;
|
||||
using eShopOnContainers.Services;
|
||||
using eShopOnContainers.Services;
|
||||
using System;
|
||||
using System.Globalization;
|
||||
using System.Reflection;
|
||||
@ -13,105 +12,109 @@ using eShopOnContainers.Core.Services.User;
|
||||
using Xamarin.Forms;
|
||||
using eShopOnContainers.Core.Services.Location;
|
||||
using eShopOnContainers.Core.Services.Marketing;
|
||||
using TinyIoC;
|
||||
|
||||
namespace eShopOnContainers.Core.ViewModels.Base
|
||||
{
|
||||
public static class ViewModelLocator
|
||||
{
|
||||
private static IContainer _container;
|
||||
private static TinyIoCContainer _container;
|
||||
|
||||
public static readonly BindableProperty AutoWireViewModelProperty =
|
||||
BindableProperty.CreateAttached("AutoWireViewModel", typeof(bool), typeof(ViewModelLocator), default(bool), propertyChanged: OnAutoWireViewModelChanged);
|
||||
public static readonly BindableProperty AutoWireViewModelProperty =
|
||||
BindableProperty.CreateAttached("AutoWireViewModel", typeof(bool), typeof(ViewModelLocator), default(bool), propertyChanged: OnAutoWireViewModelChanged);
|
||||
|
||||
public static bool GetAutoWireViewModel(BindableObject bindable)
|
||||
{
|
||||
return (bool)bindable.GetValue(ViewModelLocator.AutoWireViewModelProperty);
|
||||
}
|
||||
public static bool GetAutoWireViewModel(BindableObject bindable)
|
||||
{
|
||||
return (bool)bindable.GetValue(ViewModelLocator.AutoWireViewModelProperty);
|
||||
}
|
||||
|
||||
public static void SetAutoWireViewModel(BindableObject bindable, bool value)
|
||||
{
|
||||
bindable.SetValue(ViewModelLocator.AutoWireViewModelProperty, value);
|
||||
}
|
||||
public static void SetAutoWireViewModel(BindableObject bindable, bool value)
|
||||
{
|
||||
bindable.SetValue(ViewModelLocator.AutoWireViewModelProperty, value);
|
||||
}
|
||||
|
||||
public static bool UseMockService { get; set; }
|
||||
public static bool UseMockService { get; set; }
|
||||
|
||||
public static void RegisterDependencies(bool useMockServices)
|
||||
{
|
||||
var builder = new ContainerBuilder();
|
||||
static ViewModelLocator()
|
||||
{
|
||||
_container = new TinyIoCContainer();
|
||||
|
||||
// View models
|
||||
builder.RegisterType<BasketViewModel>();
|
||||
builder.RegisterType<CatalogViewModel>();
|
||||
builder.RegisterType<CheckoutViewModel>();
|
||||
builder.RegisterType<LoginViewModel>();
|
||||
builder.RegisterType<MainViewModel>();
|
||||
builder.RegisterType<OrderDetailViewModel>();
|
||||
builder.RegisterType<ProfileViewModel>();
|
||||
builder.RegisterType<SettingsViewModel>();
|
||||
builder.RegisterType<CampaignViewModel>();
|
||||
builder.RegisterType<CampaignDetailsViewModel>();
|
||||
// View models
|
||||
_container.Register<BasketViewModel>();
|
||||
_container.Register<CatalogViewModel>();
|
||||
_container.Register<CheckoutViewModel>();
|
||||
_container.Register<LoginViewModel>();
|
||||
_container.Register<MainViewModel>();
|
||||
_container.Register<OrderDetailViewModel>();
|
||||
_container.Register<ProfileViewModel>();
|
||||
_container.Register<SettingsViewModel>();
|
||||
_container.Register<CampaignViewModel>();
|
||||
_container.Register<CampaignDetailsViewModel>();
|
||||
|
||||
// Services
|
||||
builder.RegisterType<NavigationService>().As<INavigationService>().SingleInstance();
|
||||
builder.RegisterType<DialogService>().As<IDialogService>();
|
||||
builder.RegisterType<OpenUrlService>().As<IOpenUrlService>();
|
||||
builder.RegisterType<IdentityService>().As<IIdentityService>();
|
||||
builder.RegisterType<RequestProvider>().As<IRequestProvider>();
|
||||
builder.RegisterType<LocationService>().As<ILocationService>().SingleInstance();
|
||||
_container.Register<INavigationService, NavigationService>().AsSingleton();
|
||||
_container.Register<IDialogService, DialogService>();
|
||||
_container.Register<IOpenUrlService, OpenUrlService>();
|
||||
_container.Register<IIdentityService, IdentityService>();
|
||||
_container.Register<IRequestProvider, RequestProvider>();
|
||||
_container.Register<ILocationService, LocationService>().AsSingleton();
|
||||
_container.Register<ICatalogService, CatalogMockService>().AsSingleton();
|
||||
_container.Register<IBasketService, BasketMockService>().AsSingleton();
|
||||
_container.Register<IOrderService, OrderMockService>().AsSingleton();
|
||||
_container.Register<IUserService, UserMockService>().AsSingleton();
|
||||
_container.Register<ICampaignService, CampaignMockService>().AsSingleton();
|
||||
}
|
||||
|
||||
public static void UpdateDependencies(bool useMockServices)
|
||||
{
|
||||
// Change injected dependencies
|
||||
if (useMockServices)
|
||||
{
|
||||
builder.RegisterInstance(new CatalogMockService()).As<ICatalogService>();
|
||||
builder.RegisterInstance(new BasketMockService()).As<IBasketService>();
|
||||
builder.RegisterInstance(new OrderMockService()).As<IOrderService>();
|
||||
builder.RegisterInstance(new UserMockService()).As<IUserService>();
|
||||
builder.RegisterInstance(new CampaignMockService()).As<ICampaignService>();
|
||||
{
|
||||
_container.Register<ICatalogService, CatalogMockService>().AsSingleton();
|
||||
_container.Register<IBasketService, BasketMockService>().AsSingleton();
|
||||
_container.Register<IOrderService, OrderMockService>().AsSingleton();
|
||||
_container.Register<IUserService, UserMockService>().AsSingleton();
|
||||
_container.Register<ICampaignService, CampaignMockService>().AsSingleton();
|
||||
|
||||
UseMockService = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
builder.RegisterType<CatalogService>().As<ICatalogService>().SingleInstance();
|
||||
builder.RegisterType<BasketService>().As<IBasketService>().SingleInstance();
|
||||
builder.RegisterType<OrderService>().As<IOrderService>().SingleInstance();
|
||||
builder.RegisterType<UserService>().As<IUserService>().SingleInstance();
|
||||
builder.RegisterType<CampaignService>().As<ICampaignService>().SingleInstance();
|
||||
}
|
||||
else
|
||||
{
|
||||
_container.Register<ICatalogService, CatalogService>().AsSingleton();
|
||||
_container.Register<IBasketService, BasketService>().AsSingleton();
|
||||
_container.Register<IOrderService, OrderService>().AsSingleton();
|
||||
_container.Register<IUserService, UserService>().AsSingleton();
|
||||
_container.Register<ICampaignService, CampaignService>().AsSingleton();
|
||||
|
||||
UseMockService = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (_container != null)
|
||||
{
|
||||
_container.Dispose();
|
||||
}
|
||||
_container = builder.Build();
|
||||
}
|
||||
public static T Resolve<T>() where T : class
|
||||
{
|
||||
return _container.Resolve<T>();
|
||||
}
|
||||
|
||||
public static T Resolve<T>()
|
||||
{
|
||||
return _container.Resolve<T>();
|
||||
}
|
||||
private static void OnAutoWireViewModelChanged(BindableObject bindable, object oldValue, object newValue)
|
||||
{
|
||||
var view = bindable as Element;
|
||||
if (view == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
private static void OnAutoWireViewModelChanged(BindableObject bindable, object oldValue, object newValue)
|
||||
{
|
||||
var view = bindable as Element;
|
||||
if (view == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var viewType = view.GetType();
|
||||
var viewName = viewType.FullName.Replace(".Views.", ".ViewModels.");
|
||||
var viewAssemblyName = viewType.GetTypeInfo().Assembly.FullName;
|
||||
var viewModelName = string.Format(CultureInfo.InvariantCulture, "{0}Model, {1}", viewName, viewAssemblyName);
|
||||
|
||||
var viewType = view.GetType();
|
||||
var viewName = viewType.FullName.Replace(".Views.", ".ViewModels.");
|
||||
var viewAssemblyName = viewType.GetTypeInfo().Assembly.FullName;
|
||||
var viewModelName = string.Format(CultureInfo.InvariantCulture, "{0}Model, {1}", viewName, viewAssemblyName);
|
||||
|
||||
var viewModelType = Type.GetType(viewModelName);
|
||||
if (viewModelType == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var viewModel = _container.Resolve(viewModelType);
|
||||
view.BindingContext = viewModel;
|
||||
}
|
||||
}
|
||||
var viewModelType = Type.GetType(viewModelName);
|
||||
if (viewModelType == null)
|
||||
{
|
||||
return;
|
||||
}
|
||||
var viewModel = _container.Resolve(viewModelType);
|
||||
view.BindingContext = viewModel;
|
||||
}
|
||||
}
|
||||
}
|
@ -71,7 +71,7 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
_useAzureServices = value;
|
||||
|
||||
UpdateUseAzureServices();
|
||||
|
||||
|
||||
RaisePropertyChanged(() => UseAzureServices);
|
||||
}
|
||||
}
|
||||
@ -146,7 +146,7 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
{
|
||||
_endpoint = value;
|
||||
|
||||
if(!string.IsNullOrEmpty(_endpoint))
|
||||
if (!string.IsNullOrEmpty(_endpoint))
|
||||
{
|
||||
UpdateEndpoint();
|
||||
}
|
||||
@ -213,32 +213,32 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
return base.InitializeAsync(navigationData);
|
||||
}
|
||||
|
||||
private async Task ToggleMockServicesAsync()
|
||||
{
|
||||
ViewModelLocator.RegisterDependencies(!UseAzureServices);
|
||||
UpdateInfoUseAzureServices();
|
||||
private async Task ToggleMockServicesAsync()
|
||||
{
|
||||
ViewModelLocator.UpdateDependencies(!UseAzureServices);
|
||||
UpdateInfoUseAzureServices();
|
||||
|
||||
var previousPageViewModel = NavigationService.PreviousPageViewModel;
|
||||
if (previousPageViewModel != null)
|
||||
{
|
||||
if (previousPageViewModel is MainViewModel)
|
||||
{
|
||||
// Slight delay so that page navigation isn't instantaneous
|
||||
await Task.Delay(1000);
|
||||
if (UseAzureServices)
|
||||
{
|
||||
Settings.AuthAccessToken = string.Empty;
|
||||
Settings.AuthIdToken = string.Empty;
|
||||
await NavigationService.NavigateToAsync<LoginViewModel>(new LogoutParameter { Logout = true });
|
||||
await NavigationService.RemoveBackStackAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
var previousPageViewModel = NavigationService.PreviousPageViewModel;
|
||||
if (previousPageViewModel != null)
|
||||
{
|
||||
if (previousPageViewModel is MainViewModel)
|
||||
{
|
||||
// Slight delay so that page navigation isn't instantaneous
|
||||
await Task.Delay(1000);
|
||||
if (UseAzureServices)
|
||||
{
|
||||
Settings.AuthAccessToken = string.Empty;
|
||||
Settings.AuthIdToken = string.Empty;
|
||||
await NavigationService.NavigateToAsync<LoginViewModel>(new LogoutParameter { Logout = true });
|
||||
await NavigationService.RemoveBackStackAsync();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ToggleFakeLocationAsync()
|
||||
{
|
||||
ViewModelLocator.RegisterDependencies(!UseAzureServices);
|
||||
ViewModelLocator.UpdateDependencies(!UseAzureServices);
|
||||
UpdateInfoFakeLocation();
|
||||
}
|
||||
|
||||
@ -254,7 +254,7 @@ namespace eShopOnContainers.Core.ViewModels
|
||||
var authToken = Settings.AuthAccessToken;
|
||||
|
||||
await _locationService.UpdateUserLocation(locationRequest, authToken);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void ToggleAllowGpsLocation()
|
||||
|
@ -14,7 +14,9 @@
|
||||
<PackageReference Include="Xam.Plugin.Geolocator" Version="3.0.4" />
|
||||
<PackageReference Include="Xamarin.FFImageLoading.Forms" Version="2.3.4" />
|
||||
<PackageReference Include="Xamarin.Forms" Version="2.5.0.122203" />
|
||||
<PackageReference Include="Autofac" Version="4.6.2" />
|
||||
<PackageReference Include="IdentityModel" Version="3.0.0" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Folder Include="TinyIoC\" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
@ -184,9 +184,6 @@
|
||||
<Reference Include="IdentityModel">
|
||||
<HintPath>..\..\..\..\packages\IdentityModel.3.0.0\lib\netstandard2.0\IdentityModel.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Autofac">
|
||||
<HintPath>..\..\..\..\packages\Autofac.4.6.2\lib\netstandard1.1\Autofac.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PInvoke.Windows.Core">
|
||||
<HintPath>..\..\..\..\packages\PInvoke.Windows.Core.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.Windows.Core.dll</HintPath>
|
||||
</Reference>
|
||||
|
@ -3,7 +3,6 @@
|
||||
<package id="Acr.Support" version="2.1.0" targetFramework="monoandroid80" />
|
||||
<package id="Acr.UserDialogs" version="6.5.1" targetFramework="monoandroid80" />
|
||||
<package id="AndHUD" version="1.2.0" targetFramework="monoandroid80" />
|
||||
<package id="Autofac" version="4.6.2" targetFramework="monoandroid80" />
|
||||
<package id="IdentityModel" version="3.0.0" targetFramework="monoandroid80" />
|
||||
<package id="Microsoft.Bcl" version="1.1.10" targetFramework="monoandroid80" />
|
||||
<package id="Microsoft.Bcl.Build" version="1.0.21" targetFramework="monoandroid80" />
|
||||
|
@ -151,9 +151,6 @@
|
||||
<Reference Include="IdentityModel">
|
||||
<HintPath>..\..\..\..\packages\IdentityModel.3.0.0\lib\netstandard2.0\IdentityModel.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Autofac">
|
||||
<HintPath>..\..\..\..\packages\Autofac.4.6.2\lib\netstandard1.1\Autofac.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Plugin.Settings.Abstractions">
|
||||
<HintPath>..\..\..\..\packages\Xam.Plugins.Settings.3.1.1\lib\MonoAndroid10\Plugin.Settings.Abstractions.dll</HintPath>
|
||||
</Reference>
|
||||
|
@ -3,7 +3,6 @@
|
||||
<package id="Acr.Support" version="2.1.0" targetFramework="monoandroid80" />
|
||||
<package id="Acr.UserDialogs" version="6.5.1" targetFramework="monoandroid80" />
|
||||
<package id="AndHUD" version="1.2.0" targetFramework="monoandroid80" />
|
||||
<package id="Autofac" version="4.6.2" targetFramework="monoandroid80" />
|
||||
<package id="IdentityModel" version="3.0.0" targetFramework="monoandroid80" />
|
||||
<package id="Microsoft.CSharp" version="4.3.0" targetFramework="monoandroid80" />
|
||||
<package id="Microsoft.NETCore.Platforms" version="1.1.0" targetFramework="monoandroid80" />
|
||||
|
@ -144,9 +144,6 @@
|
||||
<Reference Include="xunit.execution.dotnet">
|
||||
<HintPath>..\..\..\..\packages\xunit.extensibility.execution.2.3.1\lib\netstandard1.1\xunit.execution.dotnet.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Autofac">
|
||||
<HintPath>..\..\..\..\packages\Autofac.4.6.2\lib\netstandard1.1\Autofac.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Microsoft.CSharp" />
|
||||
<Reference Include="Newtonsoft.Json">
|
||||
<HintPath>..\..\..\..\packages\Newtonsoft.Json.10.0.3\lib\netstandard1.3\Newtonsoft.Json.dll</HintPath>
|
||||
|
@ -1,6 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Autofac" version="4.6.2" targetFramework="xamarinios10" />
|
||||
<package id="Microsoft.CSharp" version="4.3.0" targetFramework="xamarinios10" />
|
||||
<package id="Microsoft.NETCore.Platforms" version="1.1.0" targetFramework="xamarinios10" />
|
||||
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="xamarinios10" />
|
||||
|
@ -12,7 +12,7 @@ namespace eShopOnContainers.UnitTests
|
||||
{
|
||||
public CatalogViewModelTests()
|
||||
{
|
||||
ViewModelLocator.RegisterDependencies(true);
|
||||
ViewModelLocator.UpdateDependencies(true);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
@ -10,7 +10,7 @@ namespace eShopOnContainers.UnitTests
|
||||
{
|
||||
public MainViewModelTests()
|
||||
{
|
||||
ViewModelLocator.RegisterDependencies(true);
|
||||
ViewModelLocator.UpdateDependencies(true);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
@ -10,7 +10,7 @@
|
||||
{
|
||||
public MarketingViewModelTests()
|
||||
{
|
||||
ViewModelLocator.RegisterDependencies(true);
|
||||
ViewModelLocator.UpdateDependencies(true);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
@ -9,7 +9,7 @@ namespace eShopOnContainers.UnitTests
|
||||
{
|
||||
public MockViewModelTests()
|
||||
{
|
||||
ViewModelLocator.RegisterDependencies(true);
|
||||
ViewModelLocator.UpdateDependencies(true);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
@ -11,7 +11,7 @@ namespace eShopOnContainers.UnitTests
|
||||
{
|
||||
public OrderViewModelTests()
|
||||
{
|
||||
ViewModelLocator.RegisterDependencies(true);
|
||||
ViewModelLocator.UpdateDependencies(true);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
|
@ -173,9 +173,6 @@
|
||||
<Reference Include="SlideOverKit.iOS">
|
||||
<HintPath>..\..\..\..\packages\SlideOverKit.2.1.5\lib\Xamarin.iOS10\SlideOverKit.iOS.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Autofac">
|
||||
<HintPath>..\..\..\..\packages\Autofac.4.6.2\lib\netstandard1.1\Autofac.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Plugin.Settings.Abstractions">
|
||||
<HintPath>..\..\..\..\packages\Xam.Plugins.Settings.3.1.1\lib\Xamarin.iOS10\Plugin.Settings.Abstractions.dll</HintPath>
|
||||
</Reference>
|
||||
@ -207,6 +204,27 @@
|
||||
<Reference Include="Plugin.Geolocator">
|
||||
<HintPath>..\..\..\..\packages\Xam.Plugin.Geolocator.3.0.4\lib\Xamarin.iOS10\Plugin.Geolocator.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PInvoke.Windows.Core">
|
||||
<HintPath>..\..\..\..\packages\PInvoke.Windows.Core.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.Windows.Core.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PInvoke.Kernel32">
|
||||
<HintPath>..\..\..\..\packages\PInvoke.Kernel32.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.Kernel32.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PInvoke.BCrypt">
|
||||
<HintPath>..\..\..\..\packages\PInvoke.BCrypt.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.BCrypt.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PInvoke.NCrypt">
|
||||
<HintPath>..\..\..\..\packages\PInvoke.NCrypt.0.3.2\lib\portable-net45+win+wpa81+MonoAndroid10+xamarinios10+MonoTouch10\PInvoke.NCrypt.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="Validation">
|
||||
<HintPath>..\..\..\..\packages\Validation.2.2.8\lib\dotnet\Validation.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="PCLCrypto">
|
||||
<HintPath>..\..\..\..\packages\PCLCrypto.2.0.147\lib\xamarinios10\PCLCrypto.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="IdentityModel">
|
||||
<HintPath>..\..\..\..\packages\IdentityModel.3.0.0\lib\netstandard2.0\IdentityModel.dll</HintPath>
|
||||
</Reference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<BundleResource Include="Resources\fake_product_01.png" />
|
||||
|
@ -2,13 +2,18 @@
|
||||
<packages>
|
||||
<package id="Acr.Support" version="2.1.0" targetFramework="xamarinios10" />
|
||||
<package id="Acr.UserDialogs" version="6.5.1" targetFramework="xamarinios10" />
|
||||
<package id="Autofac" version="4.6.2" targetFramework="xamarinios10" />
|
||||
<package id="BTProgressHUD" version="1.2.0.5" targetFramework="xamarinios10" />
|
||||
<package id="IdentityModel" version="3.0.0" targetFramework="xamarinios10" />
|
||||
<package id="Microsoft.CSharp" version="4.3.0" targetFramework="xamarinios10" />
|
||||
<package id="Microsoft.NETCore.Platforms" version="1.1.0" targetFramework="xamarinios10" />
|
||||
<package id="Microsoft.Win32.Primitives" version="4.3.0" targetFramework="xamarinios10" />
|
||||
<package id="NETStandard.Library" version="2.0.0" targetFramework="xamarinios10" />
|
||||
<package id="Newtonsoft.Json" version="10.0.3" targetFramework="xamarinios10" />
|
||||
<package id="PCLCrypto" version="2.0.147" targetFramework="xamarinios10" />
|
||||
<package id="PInvoke.BCrypt" version="0.3.2" targetFramework="xamarinios10" />
|
||||
<package id="PInvoke.Kernel32" version="0.3.2" targetFramework="xamarinios10" />
|
||||
<package id="PInvoke.NCrypt" version="0.3.2" targetFramework="xamarinios10" />
|
||||
<package id="PInvoke.Windows.Core" version="0.3.2" targetFramework="xamarinios10" />
|
||||
<package id="SlideOverKit" version="2.1.5" targetFramework="xamarinios10" />
|
||||
<package id="Splat" version="2.0.0" targetFramework="xamarinios10" />
|
||||
<package id="System.AppContext" version="4.3.0" targetFramework="xamarinios10" />
|
||||
@ -58,6 +63,7 @@
|
||||
<package id="System.Xml.ReaderWriter" version="4.3.0" targetFramework="xamarinios10" />
|
||||
<package id="System.Xml.XDocument" version="4.3.0" targetFramework="xamarinios10" />
|
||||
<package id="System.Xml.XmlDocument" version="4.3.0" targetFramework="xamarinios10" />
|
||||
<package id="Validation" version="2.2.8" targetFramework="xamarinios10" />
|
||||
<package id="WebP.Touch" version="1.0.7" targetFramework="xamarinios10" />
|
||||
<package id="Xam.Plugin.Geolocator" version="3.0.4" targetFramework="xamarinios10" />
|
||||
<package id="Xam.Plugins.Settings" version="3.1.1" targetFramework="xamarinios10" />
|
||||
|
Loading…
x
Reference in New Issue
Block a user