diff --git a/eShopOnContainers-MobileApps.sln b/eShopOnContainers-MobileApps.sln
new file mode 100644
index 000000000..ac4f693a1
--- /dev/null
+++ b/eShopOnContainers-MobileApps.sln
@@ -0,0 +1,515 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{932D8224-11F6-4D07-B109-DA28AD288A63}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3AF739CD-81D8-428D-A08A-0A58372DEBF6}"
+ ProjectSection(SolutionItems) = preProject
+ docker-compose.yml = docker-compose.yml
+ global.json = global.json
+ NuGet.config = NuGet.config
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mobile Apps", "Mobile Apps", "{F61357CE-1CC2-410E-8776-B16EEBC98EB8}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{A857AD10-40FF-4303-BEC2-FF1C58D5735E}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.Core", "src\Mobile\eShopOnContainers\eShopOnContainers.Core\eShopOnContainers.Core.csproj", "{65116D1C-145B-4693-ABDA-F0FB6F425191}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.Droid", "src\Mobile\eShopOnContainers\eShopOnContainers.Droid\eShopOnContainers.Droid.csproj", "{62DBB163-9CA9-4818-B48B-13233DF37C24}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.iOS", "src\Mobile\eShopOnContainers\eShopOnContainers.iOS\eShopOnContainers.iOS.csproj", "{6EEB23DC-7063-4444-9AF8-90DF24F549C0}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.Windows", "src\Mobile\eShopOnContainers\eShopOnContainers.Windows\eShopOnContainers.Windows.csproj", "{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared Code", "Shared Code", "{778289CA-31F7-4464-8C2A-612EE846F8A7}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Targets", "Targets", "{9CC7814B-72A6-465B-A61C-57B512DEE303}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mobile Apps", "Mobile Apps", "{B7B1D395-4E06-4036-BE86-C216756B9367}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.UnitTests", "src\Mobile\eShopOnContainers\eShopOnContainers.UnitTests\eShopOnContainers.UnitTests.csproj", "{F7B6A162-BC4D-4924-B16A-713F9B0344E7}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.TestRunner.Droid", "src\Mobile\eShopOnContainers\eShopOnContainers.TestRunner.Droid\eShopOnContainers.TestRunner.Droid.csproj", "{A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.TestRunner.Windows", "src\Mobile\eShopOnContainers\eShopOnContainers.TestRunner.Windows\eShopOnContainers.TestRunner.Windows.csproj", "{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.TestRunner.iOS", "src\Mobile\eShopOnContainers\eShopOnContainers.TestRunner.iOS\eShopOnContainers.TestRunner.iOS.csproj", "{B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Ad-Hoc|Any CPU = Ad-Hoc|Any CPU
+ Ad-Hoc|ARM = Ad-Hoc|ARM
+ Ad-Hoc|iPhone = Ad-Hoc|iPhone
+ Ad-Hoc|iPhoneSimulator = Ad-Hoc|iPhoneSimulator
+ Ad-Hoc|x64 = Ad-Hoc|x64
+ Ad-Hoc|x86 = Ad-Hoc|x86
+ AppStore|Any CPU = AppStore|Any CPU
+ AppStore|ARM = AppStore|ARM
+ AppStore|iPhone = AppStore|iPhone
+ AppStore|iPhoneSimulator = AppStore|iPhoneSimulator
+ AppStore|x64 = AppStore|x64
+ AppStore|x86 = AppStore|x86
+ Debug|Any CPU = Debug|Any CPU
+ Debug|ARM = Debug|ARM
+ Debug|iPhone = Debug|iPhone
+ Debug|iPhoneSimulator = Debug|iPhoneSimulator
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|ARM = Release|ARM
+ Release|iPhone = Release|iPhone
+ Release|iPhoneSimulator = Release|iPhoneSimulator
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Ad-Hoc|x64.Build.0 = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Ad-Hoc|x86.Build.0 = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.AppStore|Any CPU.Build.0 = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.AppStore|ARM.ActiveCfg = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.AppStore|ARM.Build.0 = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.AppStore|iPhone.Build.0 = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.AppStore|x64.ActiveCfg = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.AppStore|x64.Build.0 = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.AppStore|x86.ActiveCfg = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.AppStore|x86.Build.0 = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Debug|ARM.Build.0 = Debug|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Debug|x64.Build.0 = Debug|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Debug|x86.Build.0 = Debug|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Release|Any CPU.Build.0 = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Release|ARM.ActiveCfg = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Release|ARM.Build.0 = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Release|iPhone.Build.0 = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Release|x64.ActiveCfg = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Release|x64.Build.0 = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Release|x86.ActiveCfg = Release|Any CPU
+ {65116D1C-145B-4693-ABDA-F0FB6F425191}.Release|x86.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Ad-Hoc|Any CPU.Deploy.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Ad-Hoc|ARM.Deploy.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Ad-Hoc|iPhone.Deploy.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Ad-Hoc|x64.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Ad-Hoc|x64.Deploy.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Ad-Hoc|x86.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Ad-Hoc|x86.Deploy.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.AppStore|Any CPU.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.AppStore|Any CPU.Deploy.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.AppStore|ARM.ActiveCfg = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.AppStore|ARM.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.AppStore|ARM.Deploy.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.AppStore|iPhone.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.AppStore|iPhone.Deploy.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.AppStore|iPhoneSimulator.Deploy.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.AppStore|x64.ActiveCfg = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.AppStore|x64.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.AppStore|x64.Deploy.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.AppStore|x86.ActiveCfg = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.AppStore|x86.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.AppStore|x86.Deploy.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Debug|ARM.Build.0 = Debug|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Debug|ARM.Deploy.0 = Debug|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Debug|iPhone.Deploy.0 = Debug|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Debug|x64.Build.0 = Debug|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Debug|x64.Deploy.0 = Debug|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Debug|x86.Build.0 = Debug|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Debug|x86.Deploy.0 = Debug|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Release|Any CPU.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Release|Any CPU.Deploy.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Release|ARM.ActiveCfg = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Release|ARM.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Release|ARM.Deploy.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Release|iPhone.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Release|iPhone.Deploy.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Release|x64.ActiveCfg = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Release|x64.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Release|x64.Deploy.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Release|x86.ActiveCfg = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Release|x86.Build.0 = Release|Any CPU
+ {62DBB163-9CA9-4818-B48B-13233DF37C24}.Release|x86.Deploy.0 = Release|Any CPU
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Ad-Hoc|Any CPU.ActiveCfg = Ad-Hoc|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Ad-Hoc|ARM.ActiveCfg = Ad-Hoc|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Ad-Hoc|iPhone.ActiveCfg = Ad-Hoc|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Ad-Hoc|iPhone.Build.0 = Ad-Hoc|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Ad-Hoc|iPhoneSimulator
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Ad-Hoc|iPhoneSimulator.Build.0 = Ad-Hoc|iPhoneSimulator
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Ad-Hoc|x64.ActiveCfg = Ad-Hoc|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Ad-Hoc|x86.ActiveCfg = Ad-Hoc|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.AppStore|Any CPU.ActiveCfg = AppStore|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.AppStore|ARM.ActiveCfg = AppStore|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.AppStore|iPhone.ActiveCfg = AppStore|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.AppStore|iPhone.Build.0 = AppStore|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.AppStore|iPhoneSimulator.ActiveCfg = AppStore|iPhoneSimulator
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.AppStore|iPhoneSimulator.Build.0 = AppStore|iPhoneSimulator
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.AppStore|x64.ActiveCfg = AppStore|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.AppStore|x86.ActiveCfg = AppStore|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Debug|Any CPU.ActiveCfg = Debug|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Debug|ARM.ActiveCfg = Debug|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Debug|iPhone.ActiveCfg = Debug|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Debug|iPhone.Build.0 = Debug|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Debug|x64.ActiveCfg = Debug|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Debug|x86.ActiveCfg = Debug|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Release|Any CPU.ActiveCfg = Release|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Release|ARM.ActiveCfg = Release|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Release|iPhone.ActiveCfg = Release|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Release|iPhone.Build.0 = Release|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Release|x64.ActiveCfg = Release|iPhone
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0}.Release|x86.ActiveCfg = Release|iPhone
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Ad-Hoc|Any CPU.ActiveCfg = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Ad-Hoc|Any CPU.Build.0 = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Ad-Hoc|Any CPU.Deploy.0 = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Ad-Hoc|ARM.ActiveCfg = Release|ARM
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Ad-Hoc|ARM.Build.0 = Release|ARM
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Ad-Hoc|ARM.Deploy.0 = Release|ARM
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Ad-Hoc|iPhone.ActiveCfg = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Ad-Hoc|iPhone.Build.0 = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Ad-Hoc|iPhone.Deploy.0 = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Ad-Hoc|x64.ActiveCfg = Release|x64
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Ad-Hoc|x64.Build.0 = Release|x64
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Ad-Hoc|x64.Deploy.0 = Release|x64
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Ad-Hoc|x86.ActiveCfg = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Ad-Hoc|x86.Build.0 = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Ad-Hoc|x86.Deploy.0 = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.AppStore|Any CPU.ActiveCfg = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.AppStore|Any CPU.Build.0 = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.AppStore|Any CPU.Deploy.0 = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.AppStore|ARM.ActiveCfg = Release|ARM
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.AppStore|ARM.Build.0 = Release|ARM
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.AppStore|ARM.Deploy.0 = Release|ARM
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.AppStore|iPhone.ActiveCfg = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.AppStore|iPhone.Build.0 = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.AppStore|iPhone.Deploy.0 = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.AppStore|iPhoneSimulator.ActiveCfg = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.AppStore|iPhoneSimulator.Build.0 = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.AppStore|iPhoneSimulator.Deploy.0 = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.AppStore|x64.ActiveCfg = Release|x64
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.AppStore|x64.Build.0 = Release|x64
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.AppStore|x64.Deploy.0 = Release|x64
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.AppStore|x86.ActiveCfg = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.AppStore|x86.Build.0 = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.AppStore|x86.Deploy.0 = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|ARM.ActiveCfg = Debug|ARM
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|ARM.Build.0 = Debug|ARM
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|ARM.Deploy.0 = Debug|ARM
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhone.ActiveCfg = Debug|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhone.Build.0 = Debug|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhone.Deploy.0 = Debug|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|x64.ActiveCfg = Debug|x64
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|x64.Build.0 = Debug|x64
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|x64.Deploy.0 = Debug|x64
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|x86.ActiveCfg = Debug|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|x86.Build.0 = Debug|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|x86.Deploy.0 = Debug|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Release|Any CPU.ActiveCfg = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Release|ARM.ActiveCfg = Release|ARM
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Release|ARM.Build.0 = Release|ARM
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Release|ARM.Deploy.0 = Release|ARM
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Release|iPhone.ActiveCfg = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Release|iPhoneSimulator.ActiveCfg = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Release|x64.ActiveCfg = Release|x64
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Release|x64.Build.0 = Release|x64
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Release|x64.Deploy.0 = Release|x64
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Release|x86.ActiveCfg = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Release|x86.Build.0 = Release|x86
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Release|x86.Deploy.0 = Release|x86
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Ad-Hoc|x64.Build.0 = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Ad-Hoc|x86.Build.0 = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.AppStore|Any CPU.Build.0 = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.AppStore|ARM.ActiveCfg = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.AppStore|ARM.Build.0 = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.AppStore|iPhone.Build.0 = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.AppStore|x64.ActiveCfg = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.AppStore|x64.Build.0 = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.AppStore|x86.ActiveCfg = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.AppStore|x86.Build.0 = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Debug|ARM.Build.0 = Debug|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Debug|x64.Build.0 = Debug|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Debug|x86.Build.0 = Debug|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Release|ARM.ActiveCfg = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Release|ARM.Build.0 = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Release|iPhone.Build.0 = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Release|x64.ActiveCfg = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Release|x64.Build.0 = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Release|x86.ActiveCfg = Release|Any CPU
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7}.Release|x86.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Ad-Hoc|Any CPU.Deploy.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Ad-Hoc|ARM.Deploy.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Ad-Hoc|iPhone.Deploy.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Ad-Hoc|x64.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Ad-Hoc|x64.Deploy.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Ad-Hoc|x86.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Ad-Hoc|x86.Deploy.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.AppStore|Any CPU.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.AppStore|Any CPU.Deploy.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.AppStore|ARM.ActiveCfg = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.AppStore|ARM.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.AppStore|ARM.Deploy.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.AppStore|iPhone.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.AppStore|iPhone.Deploy.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.AppStore|iPhoneSimulator.Deploy.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.AppStore|x64.ActiveCfg = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.AppStore|x64.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.AppStore|x64.Deploy.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.AppStore|x86.ActiveCfg = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.AppStore|x86.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.AppStore|x86.Deploy.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Debug|Any CPU.Deploy.0 = Debug|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Debug|ARM.Build.0 = Debug|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Debug|ARM.Deploy.0 = Debug|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Debug|iPhone.Deploy.0 = Debug|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Debug|iPhoneSimulator.Deploy.0 = Debug|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Debug|x64.Build.0 = Debug|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Debug|x64.Deploy.0 = Debug|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Debug|x86.Build.0 = Debug|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Debug|x86.Deploy.0 = Debug|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Release|Any CPU.Deploy.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Release|ARM.ActiveCfg = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Release|ARM.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Release|ARM.Deploy.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Release|iPhone.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Release|iPhone.Deploy.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Release|iPhoneSimulator.Deploy.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Release|x64.ActiveCfg = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Release|x64.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Release|x64.Deploy.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Release|x86.ActiveCfg = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Release|x86.Build.0 = Release|Any CPU
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}.Release|x86.Deploy.0 = Release|Any CPU
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Ad-Hoc|Any CPU.ActiveCfg = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Ad-Hoc|Any CPU.Build.0 = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Ad-Hoc|Any CPU.Deploy.0 = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Ad-Hoc|ARM.ActiveCfg = Release|ARM
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Ad-Hoc|ARM.Build.0 = Release|ARM
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Ad-Hoc|ARM.Deploy.0 = Release|ARM
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Ad-Hoc|iPhone.ActiveCfg = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Ad-Hoc|iPhone.Build.0 = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Ad-Hoc|iPhone.Deploy.0 = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Ad-Hoc|iPhoneSimulator.Deploy.0 = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Ad-Hoc|x64.ActiveCfg = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Ad-Hoc|x64.Build.0 = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Ad-Hoc|x64.Deploy.0 = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Ad-Hoc|x86.ActiveCfg = Release|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Ad-Hoc|x86.Build.0 = Release|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Ad-Hoc|x86.Deploy.0 = Release|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.AppStore|Any CPU.ActiveCfg = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.AppStore|Any CPU.Build.0 = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.AppStore|Any CPU.Deploy.0 = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.AppStore|ARM.ActiveCfg = Release|ARM
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.AppStore|ARM.Build.0 = Release|ARM
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.AppStore|ARM.Deploy.0 = Release|ARM
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.AppStore|iPhone.ActiveCfg = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.AppStore|iPhone.Build.0 = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.AppStore|iPhone.Deploy.0 = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.AppStore|iPhoneSimulator.ActiveCfg = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.AppStore|iPhoneSimulator.Build.0 = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.AppStore|iPhoneSimulator.Deploy.0 = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.AppStore|x64.ActiveCfg = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.AppStore|x64.Build.0 = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.AppStore|x64.Deploy.0 = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.AppStore|x86.ActiveCfg = Release|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.AppStore|x86.Build.0 = Release|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.AppStore|x86.Deploy.0 = Release|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|Any CPU.ActiveCfg = Debug|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|ARM.ActiveCfg = Debug|ARM
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|ARM.Build.0 = Debug|ARM
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|ARM.Deploy.0 = Debug|ARM
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|iPhone.ActiveCfg = Debug|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|iPhone.Build.0 = Debug|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|iPhone.Deploy.0 = Debug|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|iPhoneSimulator.ActiveCfg = Debug|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|x64.ActiveCfg = Debug|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|x64.Build.0 = Debug|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|x64.Deploy.0 = Debug|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|x86.ActiveCfg = Debug|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|x86.Build.0 = Debug|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|x86.Deploy.0 = Debug|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Release|Any CPU.ActiveCfg = Release|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Release|ARM.ActiveCfg = Release|ARM
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Release|ARM.Build.0 = Release|ARM
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Release|ARM.Deploy.0 = Release|ARM
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Release|iPhone.ActiveCfg = Release|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Release|iPhoneSimulator.ActiveCfg = Release|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Release|x64.ActiveCfg = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Release|x64.Build.0 = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Release|x64.Deploy.0 = Release|x64
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Release|x86.ActiveCfg = Release|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Release|x86.Build.0 = Release|x86
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Release|x86.Deploy.0 = Release|x86
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Ad-Hoc|Any CPU.ActiveCfg = Ad-Hoc|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Ad-Hoc|ARM.ActiveCfg = Ad-Hoc|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Ad-Hoc|iPhone.ActiveCfg = Ad-Hoc|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Ad-Hoc|iPhone.Build.0 = Ad-Hoc|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Ad-Hoc|iPhoneSimulator
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Ad-Hoc|iPhoneSimulator.Build.0 = Ad-Hoc|iPhoneSimulator
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Ad-Hoc|x64.ActiveCfg = Ad-Hoc|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Ad-Hoc|x86.ActiveCfg = Ad-Hoc|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.AppStore|Any CPU.ActiveCfg = AppStore|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.AppStore|ARM.ActiveCfg = AppStore|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.AppStore|iPhone.ActiveCfg = AppStore|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.AppStore|iPhone.Build.0 = AppStore|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.AppStore|iPhoneSimulator.ActiveCfg = AppStore|iPhoneSimulator
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.AppStore|iPhoneSimulator.Build.0 = AppStore|iPhoneSimulator
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.AppStore|x64.ActiveCfg = AppStore|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.AppStore|x86.ActiveCfg = AppStore|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Debug|Any CPU.ActiveCfg = Debug|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Debug|ARM.ActiveCfg = Debug|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Debug|iPhone.ActiveCfg = Debug|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Debug|iPhone.Build.0 = Debug|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Debug|iPhoneSimulator.ActiveCfg = Debug|iPhoneSimulator
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Debug|iPhoneSimulator.Build.0 = Debug|iPhoneSimulator
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Debug|x64.ActiveCfg = Debug|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Debug|x86.ActiveCfg = Debug|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Release|Any CPU.ActiveCfg = Release|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Release|ARM.ActiveCfg = Release|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Release|iPhone.ActiveCfg = Release|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Release|iPhone.Build.0 = Release|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Release|iPhoneSimulator.ActiveCfg = Release|iPhoneSimulator
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Release|iPhoneSimulator.Build.0 = Release|iPhoneSimulator
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Release|x64.ActiveCfg = Release|iPhone
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}.Release|x86.ActiveCfg = Release|iPhone
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {F61357CE-1CC2-410E-8776-B16EEBC98EB8} = {932D8224-11F6-4D07-B109-DA28AD288A63}
+ {65116D1C-145B-4693-ABDA-F0FB6F425191} = {778289CA-31F7-4464-8C2A-612EE846F8A7}
+ {62DBB163-9CA9-4818-B48B-13233DF37C24} = {9CC7814B-72A6-465B-A61C-57B512DEE303}
+ {6EEB23DC-7063-4444-9AF8-90DF24F549C0} = {9CC7814B-72A6-465B-A61C-57B512DEE303}
+ {C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B} = {9CC7814B-72A6-465B-A61C-57B512DEE303}
+ {778289CA-31F7-4464-8C2A-612EE846F8A7} = {F61357CE-1CC2-410E-8776-B16EEBC98EB8}
+ {9CC7814B-72A6-465B-A61C-57B512DEE303} = {F61357CE-1CC2-410E-8776-B16EEBC98EB8}
+ {B7B1D395-4E06-4036-BE86-C216756B9367} = {A857AD10-40FF-4303-BEC2-FF1C58D5735E}
+ {F7B6A162-BC4D-4924-B16A-713F9B0344E7} = {B7B1D395-4E06-4036-BE86-C216756B9367}
+ {A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1} = {B7B1D395-4E06-4036-BE86-C216756B9367}
+ {02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F} = {B7B1D395-4E06-4036-BE86-C216756B9367}
+ {B68C2B56-7581-46AE-B55D-D25DDFD3BFE3} = {B7B1D395-4E06-4036-BE86-C216756B9367}
+ EndGlobalSection
+EndGlobal
diff --git a/eShopOnContainers-ServicesAndWebApps.sln b/eShopOnContainers-ServicesAndWebApps.sln
new file mode 100644
index 000000000..df3f9dd3a
--- /dev/null
+++ b/eShopOnContainers-ServicesAndWebApps.sln
@@ -0,0 +1,396 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25420.1
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{932D8224-11F6-4D07-B109-DA28AD288A63}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{3AF739CD-81D8-428D-A08A-0A58372DEBF6}"
+ ProjectSection(SolutionItems) = preProject
+ docker-compose.yml = docker-compose.yml
+ global.json = global.json
+ NuGet.config = NuGet.config
+ EndProjectSection
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Services", "Services", "{91CF7717-08AB-4E65-B10E-0B426F01E2E8}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Web Apps", "Web Apps", "{E279BF0F-7F66-4F3A-A3AB-2CDA66C1CD04}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Catalog", "Catalog", "{326A7FB3-5295-468C-A4FE-67DCB823E1E5}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Basket", "Basket", "{BF3EF4F3-E4F5-41DA-9D2D-57223687D1A8}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ordering", "Ordering", "{0BD0DB92-2D98-44D9-9AC0-C59186D59B0B}"
+EndProject
+Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Basket.API", "src\Services\Basket\Basket.API\Basket.API.xproj", "{2110CBB0-3B38-4EE4-A743-DF6968D80D90}"
+EndProject
+Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Catalog.API", "src\Services\Catalog\Catalog.API\Catalog.API.xproj", "{42681D9D-750A-4DF7-BD9F-9292CFD5C253}"
+EndProject
+Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Ordering.API", "src\Services\Ordering\Ordering.API\Ordering.API.xproj", "{231226CE-690B-4979-8870-9A79D80928E2}"
+EndProject
+Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Ordering.Domain", "src\Services\Ordering\Ordering.Domain\Ordering.Domain.xproj", "{F5598DCB-6DDE-4661-AD9D-A55612DA7E76}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{A857AD10-40FF-4303-BEC2-FF1C58D5735E}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Services", "Services", "{EF0337F2-ED00-4643-89FD-EE10863F1870}"
+EndProject
+Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Ordering.Test", "test\Services\Ordering.Test\Ordering.Test.xproj", "{A0AFC432-3846-4B4E-BD8E-3C8C896F4967}"
+EndProject
+Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "eShopOnContainers.WebMVC", "src\Web\WebMVC\eShopOnContainers.WebMVC.xproj", "{F0333D8E-0B27-42B7-B2C6-78F3657624E2}"
+EndProject
+Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "eShopOnContainers.WebSPA", "src\Web\WebSPA\eShopOnContainers.WebSPA\eShopOnContainers.WebSPA.xproj", "{9842DB3A-1391-48C7-A49C-2FABD0A18AC2}"
+EndProject
+Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Ordering.Application", "src\Services\Ordering\Ordering.Application\Ordering.Application.xproj", "{4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}"
+EndProject
+Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Ordering.Infrastructure", "src\Services\Ordering\Ordering.Infrastructure\Ordering.Infrastructure.xproj", "{95F1F07C-4D92-4742-BD07-E5B805AAB651}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Ad-Hoc|Any CPU = Ad-Hoc|Any CPU
+ Ad-Hoc|ARM = Ad-Hoc|ARM
+ Ad-Hoc|iPhone = Ad-Hoc|iPhone
+ Ad-Hoc|iPhoneSimulator = Ad-Hoc|iPhoneSimulator
+ Ad-Hoc|x64 = Ad-Hoc|x64
+ Ad-Hoc|x86 = Ad-Hoc|x86
+ AppStore|Any CPU = AppStore|Any CPU
+ AppStore|ARM = AppStore|ARM
+ AppStore|iPhone = AppStore|iPhone
+ AppStore|iPhoneSimulator = AppStore|iPhoneSimulator
+ AppStore|x64 = AppStore|x64
+ AppStore|x86 = AppStore|x86
+ Debug|Any CPU = Debug|Any CPU
+ Debug|ARM = Debug|ARM
+ Debug|iPhone = Debug|iPhone
+ Debug|iPhoneSimulator = Debug|iPhoneSimulator
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|Any CPU = Release|Any CPU
+ Release|ARM = Release|ARM
+ Release|iPhone = Release|iPhone
+ Release|iPhoneSimulator = Release|iPhoneSimulator
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.AppStore|ARM.ActiveCfg = Release|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.AppStore|x64.ActiveCfg = Release|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.AppStore|x86.ActiveCfg = Release|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Release|Any CPU.Build.0 = Release|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Release|ARM.ActiveCfg = Release|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Release|x64.ActiveCfg = Release|Any CPU
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90}.Release|x86.ActiveCfg = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.AppStore|ARM.ActiveCfg = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.AppStore|x64.ActiveCfg = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.AppStore|x86.ActiveCfg = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Release|Any CPU.Build.0 = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Release|ARM.ActiveCfg = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Release|x64.ActiveCfg = Release|Any CPU
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253}.Release|x86.ActiveCfg = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.AppStore|ARM.ActiveCfg = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.AppStore|x64.ActiveCfg = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.AppStore|x86.ActiveCfg = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Release|ARM.ActiveCfg = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Release|x64.ActiveCfg = Release|Any CPU
+ {231226CE-690B-4979-8870-9A79D80928E2}.Release|x86.ActiveCfg = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.AppStore|ARM.ActiveCfg = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.AppStore|x64.ActiveCfg = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.AppStore|x86.ActiveCfg = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Release|ARM.ActiveCfg = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Release|x64.ActiveCfg = Release|Any CPU
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Release|x86.ActiveCfg = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.AppStore|ARM.ActiveCfg = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.AppStore|x64.ActiveCfg = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.AppStore|x86.ActiveCfg = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Release|Any CPU.Build.0 = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Release|ARM.ActiveCfg = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Release|x64.ActiveCfg = Release|Any CPU
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Release|x86.ActiveCfg = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.AppStore|ARM.ActiveCfg = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.AppStore|iPhone.ActiveCfg = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.AppStore|x64.ActiveCfg = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.AppStore|x86.ActiveCfg = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Release|ARM.ActiveCfg = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Release|x64.ActiveCfg = Release|Any CPU
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Release|x86.ActiveCfg = Release|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.AppStore|x64.Build.0 = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.AppStore|x86.Build.0 = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Debug|ARM.Build.0 = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Debug|x64.Build.0 = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Debug|x86.Build.0 = Debug|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Release|ARM.ActiveCfg = Release|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Release|ARM.Build.0 = Release|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Release|iPhone.Build.0 = Release|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Release|x64.ActiveCfg = Release|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Release|x64.Build.0 = Release|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Release|x86.ActiveCfg = Release|Any CPU
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2}.Release|x86.Build.0 = Release|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.AppStore|x64.Build.0 = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.AppStore|x86.Build.0 = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Debug|ARM.Build.0 = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Debug|x64.Build.0 = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Debug|x86.Build.0 = Debug|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Release|Any CPU.Build.0 = Release|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Release|ARM.ActiveCfg = Release|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Release|ARM.Build.0 = Release|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Release|iPhone.Build.0 = Release|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Release|x64.ActiveCfg = Release|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Release|x64.Build.0 = Release|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Release|x86.ActiveCfg = Release|Any CPU
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7}.Release|x86.Build.0 = Release|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.AppStore|x64.Build.0 = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.AppStore|x86.Build.0 = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Debug|ARM.Build.0 = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Debug|x64.Build.0 = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Debug|x86.Build.0 = Debug|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Release|Any CPU.Build.0 = Release|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Release|ARM.ActiveCfg = Release|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Release|ARM.Build.0 = Release|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Release|iPhone.Build.0 = Release|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Release|x64.ActiveCfg = Release|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Release|x64.Build.0 = Release|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Release|x86.ActiveCfg = Release|Any CPU
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651}.Release|x86.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(NestedProjects) = preSolution
+ {91CF7717-08AB-4E65-B10E-0B426F01E2E8} = {932D8224-11F6-4D07-B109-DA28AD288A63}
+ {E279BF0F-7F66-4F3A-A3AB-2CDA66C1CD04} = {932D8224-11F6-4D07-B109-DA28AD288A63}
+ {326A7FB3-5295-468C-A4FE-67DCB823E1E5} = {91CF7717-08AB-4E65-B10E-0B426F01E2E8}
+ {BF3EF4F3-E4F5-41DA-9D2D-57223687D1A8} = {91CF7717-08AB-4E65-B10E-0B426F01E2E8}
+ {0BD0DB92-2D98-44D9-9AC0-C59186D59B0B} = {91CF7717-08AB-4E65-B10E-0B426F01E2E8}
+ {2110CBB0-3B38-4EE4-A743-DF6968D80D90} = {BF3EF4F3-E4F5-41DA-9D2D-57223687D1A8}
+ {42681D9D-750A-4DF7-BD9F-9292CFD5C253} = {326A7FB3-5295-468C-A4FE-67DCB823E1E5}
+ {231226CE-690B-4979-8870-9A79D80928E2} = {0BD0DB92-2D98-44D9-9AC0-C59186D59B0B}
+ {F5598DCB-6DDE-4661-AD9D-A55612DA7E76} = {0BD0DB92-2D98-44D9-9AC0-C59186D59B0B}
+ {EF0337F2-ED00-4643-89FD-EE10863F1870} = {A857AD10-40FF-4303-BEC2-FF1C58D5735E}
+ {A0AFC432-3846-4B4E-BD8E-3C8C896F4967} = {EF0337F2-ED00-4643-89FD-EE10863F1870}
+ {F0333D8E-0B27-42B7-B2C6-78F3657624E2} = {E279BF0F-7F66-4F3A-A3AB-2CDA66C1CD04}
+ {9842DB3A-1391-48C7-A49C-2FABD0A18AC2} = {E279BF0F-7F66-4F3A-A3AB-2CDA66C1CD04}
+ {4193CAA3-A1C3-4818-A06F-A2D85FDE77E7} = {0BD0DB92-2D98-44D9-9AC0-C59186D59B0B}
+ {95F1F07C-4D92-4742-BD07-E5B805AAB651} = {0BD0DB92-2D98-44D9-9AC0-C59186D59B0B}
+ EndGlobalSection
+EndGlobal
diff --git a/eShopOnContainers.sln b/eShopOnContainers.sln
index c567a1f5b..88575bbc3 100644
--- a/eShopOnContainers.sln
+++ b/eShopOnContainers.sln
@@ -36,8 +36,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{A857AD10-4
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Services", "Services", "{EF0337F2-ED00-4643-89FD-EE10863F1870}"
EndProject
-Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "Ordering.Test", "test\Services\Ordering.Test\Ordering.Test.xproj", "{A0AFC432-3846-4B4E-BD8E-3C8C896F4967}"
-EndProject
Project("{8BB2217D-0F2D-49D1-97BC-3654ED321F3B}") = "eShopOnContainers.WebMVC", "src\Web\WebMVC\eShopOnContainers.WebMVC.xproj", "{F0333D8E-0B27-42B7-B2C6-78F3657624E2}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.Core", "src\Mobile\eShopOnContainers\eShopOnContainers.Core\eShopOnContainers.Core.csproj", "{65116D1C-145B-4693-ABDA-F0FB6F425191}"
@@ -204,32 +202,6 @@ Global
{F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Release|x64.ActiveCfg = Release|Any CPU
{F5598DCB-6DDE-4661-AD9D-A55612DA7E76}.Release|x86.ActiveCfg = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.AppStore|ARM.ActiveCfg = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.AppStore|iPhone.ActiveCfg = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.AppStore|x64.ActiveCfg = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.AppStore|x86.ActiveCfg = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Debug|ARM.ActiveCfg = Debug|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Debug|x64.ActiveCfg = Debug|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Debug|x86.ActiveCfg = Debug|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Release|Any CPU.Build.0 = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Release|ARM.ActiveCfg = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Release|iPhone.ActiveCfg = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Release|x64.ActiveCfg = Release|Any CPU
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967}.Release|x86.ActiveCfg = Release|Any CPU
{F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
{F0333D8E-0B27-42B7-B2C6-78F3657624E2}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
@@ -828,54 +800,54 @@ Global
{95F1F07C-4D92-4742-BD07-E5B805AAB651}.Release|x64.Build.0 = Release|Any CPU
{95F1F07C-4D92-4742-BD07-E5B805AAB651}.Release|x86.ActiveCfg = Release|Any CPU
{95F1F07C-4D92-4742-BD07-E5B805AAB651}.Release|x86.Build.0 = Release|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.AppStore|Any CPU.Build.0 = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.AppStore|ARM.ActiveCfg = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.AppStore|ARM.Build.0 = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.AppStore|iPhone.Build.0 = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.AppStore|x64.ActiveCfg = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.AppStore|x64.Build.0 = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.AppStore|x86.ActiveCfg = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.AppStore|x86.Build.0 = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Debug|ARM.ActiveCfg = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Debug|ARM.Build.0 = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Debug|iPhone.ActiveCfg = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Debug|iPhone.Build.0 = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Debug|x64.ActiveCfg = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Debug|x64.Build.0 = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Debug|x86.ActiveCfg = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Debug|x86.Build.0 = Debug|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Release|Any CPU.Build.0 = Release|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Release|ARM.ActiveCfg = Release|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Release|ARM.Build.0 = Release|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Release|iPhone.ActiveCfg = Release|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Release|iPhone.Build.0 = Release|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Release|x64.ActiveCfg = Release|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Release|x64.Build.0 = Release|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Release|x86.ActiveCfg = Release|Any CPU
- {A579E108-5445-403D-A407-339AC4D1611B}.Release|x86.Build.0 = Release|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.AppStore|Any CPU.Build.0 = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.AppStore|ARM.ActiveCfg = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.AppStore|ARM.Build.0 = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.AppStore|iPhone.Build.0 = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.AppStore|x64.ActiveCfg = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.AppStore|x64.Build.0 = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.AppStore|x86.ActiveCfg = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.AppStore|x86.Build.0 = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Debug|ARM.ActiveCfg = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Debug|ARM.Build.0 = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Debug|iPhone.ActiveCfg = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Debug|iPhone.Build.0 = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Debug|x64.ActiveCfg = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Debug|x64.Build.0 = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Debug|x86.ActiveCfg = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Debug|x86.Build.0 = Debug|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Release|Any CPU.Build.0 = Release|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Release|ARM.ActiveCfg = Release|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Release|ARM.Build.0 = Release|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Release|iPhone.ActiveCfg = Release|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Release|iPhone.Build.0 = Release|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Release|x64.ActiveCfg = Release|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Release|x64.Build.0 = Release|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Release|x86.ActiveCfg = Release|Any CPU
+ {621E7211-58D0-45FD-9600-1CB490BD930E}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -892,7 +864,6 @@ Global
{231226CE-690B-4979-8870-9A79D80928E2} = {0BD0DB92-2D98-44D9-9AC0-C59186D59B0B}
{F5598DCB-6DDE-4661-AD9D-A55612DA7E76} = {0BD0DB92-2D98-44D9-9AC0-C59186D59B0B}
{EF0337F2-ED00-4643-89FD-EE10863F1870} = {A857AD10-40FF-4303-BEC2-FF1C58D5735E}
- {A0AFC432-3846-4B4E-BD8E-3C8C896F4967} = {EF0337F2-ED00-4643-89FD-EE10863F1870}
{F0333D8E-0B27-42B7-B2C6-78F3657624E2} = {E279BF0F-7F66-4F3A-A3AB-2CDA66C1CD04}
{65116D1C-145B-4693-ABDA-F0FB6F425191} = {778289CA-31F7-4464-8C2A-612EE846F8A7}
{62DBB163-9CA9-4818-B48B-13233DF37C24} = {9CC7814B-72A6-465B-A61C-57B512DEE303}
diff --git a/global.json b/global.json
index c5112dcd4..1fe3e7546 100644
--- a/global.json
+++ b/global.json
@@ -3,7 +3,8 @@
"src",
"test",
"src/Services/Ordering",
- "src/Web"
+ "src/Web",
+ "src/Services/Catalog"
],
"sdk": {
diff --git a/src/Mobile/Images/AndroidEmulator.png b/src/Mobile/Images/AndroidEmulator.png
new file mode 100644
index 000000000..ed449cd29
Binary files /dev/null and b/src/Mobile/Images/AndroidEmulator.png differ
diff --git a/src/Mobile/Images/Auth.png b/src/Mobile/Images/Auth.png
new file mode 100644
index 000000000..7a8591348
Binary files /dev/null and b/src/Mobile/Images/Auth.png differ
diff --git a/src/Mobile/Images/Catalog.png b/src/Mobile/Images/Catalog.png
new file mode 100644
index 000000000..5a93d0f2b
Binary files /dev/null and b/src/Mobile/Images/Catalog.png differ
diff --git a/src/Mobile/Images/Filter.png b/src/Mobile/Images/Filter.png
new file mode 100644
index 000000000..8b1d12f40
Binary files /dev/null and b/src/Mobile/Images/Filter.png differ
diff --git a/src/Mobile/Images/MacAgent.png b/src/Mobile/Images/MacAgent.png
new file mode 100644
index 000000000..6f5cb99f0
Binary files /dev/null and b/src/Mobile/Images/MacAgent.png differ
diff --git a/src/Mobile/Images/OrderDetail.png b/src/Mobile/Images/OrderDetail.png
new file mode 100644
index 000000000..93072f736
Binary files /dev/null and b/src/Mobile/Images/OrderDetail.png differ
diff --git a/src/Mobile/Images/Preview.png b/src/Mobile/Images/Preview.png
new file mode 100644
index 000000000..7b63a484f
Binary files /dev/null and b/src/Mobile/Images/Preview.png differ
diff --git a/src/Mobile/Images/Profile.png b/src/Mobile/Images/Profile.png
new file mode 100644
index 000000000..1e3b86a45
Binary files /dev/null and b/src/Mobile/Images/Profile.png differ
diff --git a/src/Mobile/Images/Settings.png b/src/Mobile/Images/Settings.png
new file mode 100644
index 000000000..8f7661f71
Binary files /dev/null and b/src/Mobile/Images/Settings.png differ
diff --git a/src/Mobile/Images/ShoppingCart.png b/src/Mobile/Images/ShoppingCart.png
new file mode 100644
index 000000000..f3b46c958
Binary files /dev/null and b/src/Mobile/Images/ShoppingCart.png differ
diff --git a/src/Mobile/Images/Updates.png b/src/Mobile/Images/Updates.png
new file mode 100644
index 000000000..db0db0174
Binary files /dev/null and b/src/Mobile/Images/Updates.png differ
diff --git a/src/Mobile/README.md b/src/Mobile/README.md
new file mode 100644
index 000000000..30f840967
--- /dev/null
+++ b/src/Mobile/README.md
@@ -0,0 +1,107 @@
+#eShopOnContainers
+
+eShopOnContainers is a reference app whose imagined purpose is to serve the mobile workforce of a fictitious company that sells products. The app allow to manage the catalog, view products, manage the basket and the orders.
+
+
+
+###Try it out:
+You can download and build the app's source as-is, preconfigured to consume our Azure service instance.
+
+###Supported platforms: iOS, Android and Windows
+
+###The app architecture consists of two parts:
+ 1. A Xamarin.Forms mobile app for iOS, Android and Windows.
+ 2. A .NET Web API-backed Entity Framework based Azure Mobile Service for data.
+
+**The Azure Mobile Service does not need to be deployed by you.** There is already an instance of the service up and running in Azure, and the mobile app is configured by default to consume that service instance. We've included the code for the service so that you may run your own service instance on Azure if you'd like.
+
+##Xamarin.Forms App (eShopOnContainers)
+
+This project exercises the following platforms, frameworks or features:
+
+* Xamarin.Forms
+ * XAML
+ * Bindings
+ * Converters
+ * Central Styles
+ * Custom Renderers
+ * Animations
+ * IoC
+ * Messaging Center
+ * Custom Controls
+ * Cross Plugins
+ * XFGloss
+* xUnit Tests
+* Azure Mobile Services
+ * C# backend
+ * WebAPI
+ * Entity Framework
+ * Identity Server 4
+
+##Three platforms
+The app targets **three** platforms:
+
+* iOS
+* Android
+* Universal Windows Platform (UWP)
+ * UWP supported only in Visual Studio, not Xamarin Studio
+
+
+As of 29/11/2016, eShopOnContainers features **89.2% code share** (7.2% iOS / 16.7% Android / 8.7% Windows).
+
+## Requirements
+* [Visual Studio __2015__](https://www.visualstudio.com/en-us/products/vs-2015-product-editions.aspx) (14.0 or higher) to compile C# 6 langage features (or Visual Studio MacOS)
+* Xamarin add-ons for Visual Studio (available via the Visual Studio installer)
+* __Visual Studio Community Edition is fully supported!__
+
+## Setup
+
+#### [1. Ensure the Xamarin platform is installed](http://developer.xamarin.com/guides/cross-platform/getting_started/installation/)
+
+#### 2. Ensure Xamarin are updated
+Xamarin will periodically automatically check for updates. You can also manually check for updates.
+
+
+
+### 3. Project Setup
+
+Restore NuGet packages for the project.
+
+### 4. Ensure Android Emulator is installed
+You can use any Android emulator although it is highly recommended to use an x86 based version.
+
+
+
+**Note**: The Visual Studio Android Emulator cannot run well inside a virtual machine or over Remote Desktop or VNC since it relies on virtualization and OpenGL.
+
+To deploy and debug the application on a physical device, refer to these [link](https://developer.xamarin.com/guides/android/deployment,_testing,_and_metrics/debug-on-device/).
+
+### 5. Ensure Mac connection
+To set up the Mac host, you must enable communication between the Xamarin extension for Visual Studio and your Mac.
+
+
+
+## Screens
+
+The app has the following screens:
+
+* a auth screen
+* a catalog list
+* a profile section with a order list
+* a readonly order detail screen
+* a customizable basket
+* a checkout screen
+
+
+
+
+
+
+
+
+
+## Clean and Rebuild
+If you see build issues when pulling updates from the repo, try cleaning and rebuilding the solution.
+
+## Copyright and license
+* Code and documentation copyright 2016 Microsoft Corp. Code released under the [MIT license](https://opensource.org/licenses/MIT).
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs
index d6523392d..c4aea5cd7 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/App.xaml.cs
@@ -9,16 +9,27 @@ namespace eShopOnContainers
{
public partial class App : Application
{
+ public bool UseMockServices { get; set; }
+
public App()
{
InitializeComponent();
+ InitApp();
+
if (Device.OS == TargetPlatform.Windows)
{
InitNavigation();
}
}
+ private void InitApp()
+ {
+ UseMockServices = true;
+
+ ViewModelLocator.Instance.UpdateDependencies(UseMockServices);
+ }
+
private Task InitNavigation()
{
var navigationService = ViewModelLocator.Instance.Resolve();
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Behaviors/WebViewNavigationBehavior.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Behaviors/WebViewNavigationBehavior.cs
new file mode 100644
index 000000000..07ae80120
--- /dev/null
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Behaviors/WebViewNavigationBehavior.cs
@@ -0,0 +1,49 @@
+using System.Windows.Input;
+using Xamarin.Forms;
+
+namespace eShopOnContainers.Core.Behaviors
+{
+ public class WebViewNavigationBehavior : Behavior
+ {
+ private VisualElement _element;
+
+ public static readonly BindableProperty NavigateCommandProperty =
+ BindableProperty.Create("NavigateCommand", typeof(ICommand),
+ typeof(WebViewNavigationBehavior), default(ICommand),
+ BindingMode.OneWay, null);
+
+ public ICommand NavigateCommand
+ {
+ get { return (ICommand)GetValue(NavigateCommandProperty); }
+ set { SetValue(NavigateCommandProperty, value); }
+ }
+
+ protected override void OnAttachedTo(WebView bindable)
+ {
+ _element = bindable;
+ bindable.Navigating += OnWebViewNavigating;
+ bindable.BindingContextChanged += OnBindingContextChanged;
+ }
+
+ protected override void OnDetachingFrom(WebView bindable)
+ {
+ _element = null;
+ BindingContext = null;
+ bindable.Navigating -= OnWebViewNavigating;
+ bindable.BindingContextChanged -= OnBindingContextChanged;
+ }
+
+ private void OnBindingContextChanged(object sender, System.EventArgs e)
+ {
+ BindingContext = _element?.BindingContext;
+ }
+
+ private void OnWebViewNavigating(object sender, WebNavigatingEventArgs e)
+ {
+ if (NavigateCommand != null && NavigateCommand.CanExecute(e.Url))
+ {
+ NavigateCommand.Execute(e.Url);
+ }
+ }
+ }
+}
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/BindablePicker.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/BindablePicker.cs
index 5699f5b2d..07f592e14 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/BindablePicker.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Controls/BindablePicker.cs
@@ -23,6 +23,7 @@ namespace eShopOnContainers.Core.Controls
}
var index = 0;
+
foreach (var item in ItemsSource)
{
if (index == SelectedIndex)
@@ -30,6 +31,7 @@ namespace eShopOnContainers.Core.Controls
SelectedItem = item;
break;
}
+
index++;
}
};
@@ -62,6 +64,7 @@ namespace eShopOnContainers.Core.Controls
if (ItemsSource != null)
{
var index = 0;
+
foreach (var item in ItemsSource)
{
string strItem = item?.ToString();
@@ -73,6 +76,7 @@ namespace eShopOnContainers.Core.Controls
selectedIndex = index;
break;
}
+
index++;
}
}
@@ -102,12 +106,10 @@ namespace eShopOnContainers.Core.Controls
{
var boundPicker = (BindablePicker)bindable;
- if (boundPicker.ItemSelected != null)
- {
- boundPicker.ItemSelected(boundPicker, new SelectedItemChangedEventArgs(newValue));
- }
+ boundPicker.ItemSelected?.Invoke(boundPicker,
+ new SelectedItemChangedEventArgs(newValue));
boundPicker.InternalUpdateSelectedIndex();
}
}
-}
+}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Converters/ItemsToHeightConverter.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Converters/ItemsToHeightConverter.cs
index 6a1832fa1..419ca5082 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Converters/ItemsToHeightConverter.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Converters/ItemsToHeightConverter.cs
@@ -6,7 +6,7 @@ namespace eShopOnContainers.Core.Converters
{
public class ItemsToHeightConverter : IValueConverter
{
- private const int ItemHeight = 144;
+ private const int ItemHeight = 156;
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs
index d942bc439..792c10deb 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/GlobalSettings.cs
@@ -1,11 +1,53 @@
namespace eShopOnContainers.Core
{
- public static class GlobalSetting
+ public class GlobalSetting
{
- public const string RegisterWebsite = "http://104.40.62.65/Account/Register";
+ private string _baseEndpoint;
+ private static readonly GlobalSetting _instance = new GlobalSetting();
- public const string CatalogEndpoint = "http://104.40.62.65:5101/";
+ public GlobalSetting()
+ {
+ BaseEndpoint = "http://104.40.62.65";
+ }
- public const string BasketEndpoint = "http://104.40.62.65:5103/";
+ public static GlobalSetting Instance
+ {
+ get { return _instance; }
+ }
+
+ public string BaseEndpoint
+ {
+ get { return _baseEndpoint; }
+ set
+ {
+ _baseEndpoint = value;
+ UpdateEndpoint(_baseEndpoint);
+ }
+ }
+
+ public string RegisterWebsite { get; set; }
+
+ public string CatalogEndpoint { get; set; }
+
+ public string OrdersEndpoint { get; set; }
+
+ public string BasketEndpoint { get; set; }
+
+ public string IdentityEndpoint { get; set; }
+
+ public string LogoutEndpoint { get; set; }
+
+ public string IdentityCallback { get; set; }
+
+ private void UpdateEndpoint(string baseEndpoint)
+ {
+ RegisterWebsite = string.Format("{0}/Account/Register", baseEndpoint);
+ CatalogEndpoint = string.Format("{0}:5101", baseEndpoint);
+ OrdersEndpoint = string.Format("{0}:5102", baseEndpoint);
+ BasketEndpoint = string.Format("{0}:5103", baseEndpoint);
+ IdentityEndpoint = string.Format("{0}:5105/connect/authorize", baseEndpoint);
+ LogoutEndpoint = string.Format("{0}:5105/connect/endsession", baseEndpoint);
+ IdentityCallback = "http://localhost:5003/callback.html";
+ }
}
}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/NumericHelper.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/NumericHelper.cs
index 989d359a1..ea4022558 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/NumericHelper.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/NumericHelper.cs
@@ -7,7 +7,7 @@ namespace eShopOnContainers.Core.Helpers
public static ObservableCollection GetNumericList(int count = 100)
{
var result = new ObservableCollection();
- for (int i = 0; i < count; i++)
+ for (int i = 1; i < count; i++)
{
result.Add(i);
}
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/Settings.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/Settings.cs
new file mode 100644
index 000000000..3d2d99134
--- /dev/null
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Helpers/Settings.cs
@@ -0,0 +1,41 @@
+using Plugin.Settings;
+using Plugin.Settings.Abstractions;
+
+namespace eShopOnContainers.Core.Helpers
+{
+ ///
+ /// This is the Settings static class that can be used in your Core solution or in any
+ /// of your client applications. All settings are laid out the same exact way with getters
+ /// and setters.
+ ///
+ public static class Settings
+ {
+ private static ISettings AppSettings
+ {
+ get
+ {
+ return CrossSettings.Current;
+ }
+ }
+
+ #region Setting Constants
+
+ private const string AccessToken = "access_token";
+ private static readonly string AccessTokenDefault = string.Empty;
+
+ #endregion
+
+
+ public static string AuthAccessToken
+ {
+ get
+ {
+ return AppSettings.GetValueOrDefault(AccessToken, AccessTokenDefault);
+ }
+ set
+ {
+ AppSettings.AddOrUpdateValue(AccessToken, value);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs
index 9b5090e41..c10da754f 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Basket/BasketItem.cs
@@ -67,11 +67,14 @@ namespace eShopOnContainers.Core.Models.Basket
get { return _quantity; }
set
{
- _quantity = value;
- RaisePropertyChanged(() => Quantity);
- RaisePropertyChanged(() => Total);
+ if (_quantity != value)
+ {
+ _quantity = value;
+ RaisePropertyChanged(() => Quantity);
+ RaisePropertyChanged(() => Total);
- MessagingCenter.Send(this, MessengerKeys.UpdateProduct);
+ MessagingCenter.Send(this, MessengerKeys.UpdateProduct);
+ }
}
}
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/CardType.CS b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/CardType.CS
new file mode 100644
index 000000000..07873e79c
--- /dev/null
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/CardType.CS
@@ -0,0 +1,8 @@
+namespace eShopOnContainers.Core.Models.Orders
+{
+ public class CardType
+ {
+ public int Id { get; set; }
+ public string Name { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs
index 10712da68..8ec118a24 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Models/Orders/OrderItem.cs
@@ -3,7 +3,6 @@ using eShopOnContainers.Core.ViewModels.Base;
using eShopOnContainers.ViewModels.Base;
using System;
using System.Collections.ObjectModel;
-using Xamarin.Forms;
namespace eShopOnContainers.Core.Models.Orders
{
@@ -71,8 +70,6 @@ namespace eShopOnContainers.Core.Models.Orders
_quantity = value;
RaisePropertyChanged(() => Quantity);
RaisePropertyChanged(() => Total);
-
- MessagingCenter.Send(this, MessengerKeys.UpdateProduct);
}
}
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs
index 6bdcf0df5..5a76fc5c2 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketMockService.cs
@@ -2,7 +2,6 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using Xamarin.Forms;
-using System;
namespace eShopOnContainers.Core.Services.Basket
{
@@ -38,5 +37,15 @@ namespace eShopOnContainers.Core.Services.Basket
return MockCustomBasket;
}
+
+ public async Task ClearBasketAsync(string guidUser)
+ {
+ await Task.Delay(500);
+
+ if (!string.IsNullOrEmpty(guidUser))
+ {
+ MockCustomBasket.Items.Clear();
+ }
+ }
}
}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs
index e5bc66202..979d7188e 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/BasketService.cs
@@ -18,7 +18,7 @@ namespace eShopOnContainers.Core.Services.Basket
{
try
{
- UriBuilder builder = new UriBuilder(GlobalSetting.BasketEndpoint);
+ UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint);
builder.Path = guidUser;
@@ -41,7 +41,7 @@ namespace eShopOnContainers.Core.Services.Basket
public async Task UpdateBasketAsync(CustomerBasket customerBasket)
{
- UriBuilder builder = new UriBuilder(GlobalSetting.BasketEndpoint);
+ UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint);
string uri = builder.ToString();
@@ -49,5 +49,16 @@ namespace eShopOnContainers.Core.Services.Basket
return result;
}
+
+ public async Task ClearBasketAsync(string guidUser)
+ {
+ UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint);
+
+ builder.Path = guidUser;
+
+ string uri = builder.ToString();
+
+ await _requestProvider.DeleteAsync(uri);
+ }
}
}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/IBasketService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/IBasketService.cs
index 356eb40f7..3c6893773 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/IBasketService.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Basket/IBasketService.cs
@@ -7,5 +7,6 @@ namespace eShopOnContainers.Core.Services.Basket
{
Task GetBasketAsync(string guidUser);
Task UpdateBasketAsync(CustomerBasket customerBasket);
+ Task ClearBasketAsync(string guidUser);
}
}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs
index fa78f3625..9234e4059 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Catalog/CatalogService.cs
@@ -19,30 +19,44 @@ namespace eShopOnContainers.Core.Services.Catalog
public async Task> FilterAsync(int catalogBrandId, int catalogTypeId)
{
- UriBuilder builder = new UriBuilder(GlobalSetting.CatalogEndpoint);
+ try
+ {
+ UriBuilder builder = new UriBuilder(GlobalSetting.Instance.CatalogEndpoint);
- builder.Path = string.Format("api/v1/catalog/items/type/{0}/brand/{1}", catalogTypeId, catalogBrandId);
+ builder.Path = string.Format("api/v1/catalog/items/type/{0}/brand/{1}", catalogTypeId, catalogBrandId);
- string uri = builder.ToString();
+ string uri = builder.ToString();
- CatalogRoot catalog =
- await _requestProvider.GetAsync(uri);
+ CatalogRoot catalog =
+ await _requestProvider.GetAsync(uri);
- return catalog?.Data?.ToObservableCollection();
+ return catalog?.Data?.ToObservableCollection();
+ }
+ catch
+ {
+ return new ObservableCollection();
+ }
}
public async Task> GetCatalogAsync()
{
- UriBuilder builder = new UriBuilder(GlobalSetting.CatalogEndpoint);
+ try
+ {
+ UriBuilder builder = new UriBuilder(GlobalSetting.Instance.CatalogEndpoint);
- builder.Path = "api/v1/catalog/items";
+ builder.Path = "api/v1/catalog/items";
- string uri = builder.ToString();
+ string uri = builder.ToString();
- CatalogRoot catalog =
- await _requestProvider.GetAsync(uri);
+ CatalogRoot catalog =
+ await _requestProvider.GetAsync(uri);
- return catalog?.Data?.ToObservableCollection();
+ return catalog?.Data?.ToObservableCollection();
+ }
+ catch
+ {
+ return new ObservableCollection();
+ }
}
public Task GetCatalogItemAsync(string id)
@@ -52,30 +66,44 @@ namespace eShopOnContainers.Core.Services.Catalog
public async Task> GetCatalogBrandAsync()
{
- UriBuilder builder = new UriBuilder(GlobalSetting.CatalogEndpoint);
+ try
+ {
+ UriBuilder builder = new UriBuilder(GlobalSetting.Instance.CatalogEndpoint);
- builder.Path = "api/v1/catalog/catalogbrands";
+ builder.Path = "api/v1/catalog/catalogbrands";
- string uri = builder.ToString();
+ string uri = builder.ToString();
- IEnumerable brands =
- await _requestProvider.GetAsync>(uri);
+ IEnumerable brands =
+ await _requestProvider.GetAsync>(uri);
- return brands?.ToObservableCollection();
+ return brands?.ToObservableCollection();
+ }
+ catch
+ {
+ return new ObservableCollection();
+ }
}
public async Task> GetCatalogTypeAsync()
{
- UriBuilder builder = new UriBuilder(GlobalSetting.CatalogEndpoint);
+ try
+ {
+ UriBuilder builder = new UriBuilder(GlobalSetting.Instance.CatalogEndpoint);
- builder.Path = "api/v1/catalog/catalogtypes";
+ builder.Path = "api/v1/catalog/catalogtypes";
- string uri = builder.ToString();
+ string uri = builder.ToString();
- IEnumerable types =
- await _requestProvider.GetAsync>(uri);
+ IEnumerable types =
+ await _requestProvider.GetAsync>(uri);
- return types?.ToObservableCollection();
+ return types?.ToObservableCollection();
+ }
+ catch
+ {
+ return new ObservableCollection();
+ }
}
}
}
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Identity/IIdentityService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Identity/IIdentityService.cs
new file mode 100644
index 000000000..134e2ee73
--- /dev/null
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Identity/IIdentityService.cs
@@ -0,0 +1,9 @@
+namespace eShopOnContainers.Core.Services.Identity
+{
+ public interface IIdentityService
+ {
+ string CreateAuthorizeRequest();
+ string CreateLogoutRequest(string token);
+ string DecodeToken(string token);
+ }
+}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Identity/IdentityService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Identity/IdentityService.cs
new file mode 100644
index 000000000..b6f61c420
--- /dev/null
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Identity/IdentityService.cs
@@ -0,0 +1,69 @@
+using IdentityModel.Client;
+using Newtonsoft.Json.Linq;
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+
+namespace eShopOnContainers.Core.Services.Identity
+{
+ public class IdentityService : IIdentityService
+ {
+ public string CreateAuthorizeRequest()
+ {
+ // Create URI to authorize endpoint
+ var authorizeRequest =
+ new AuthorizeRequest(GlobalSetting.Instance.IdentityEndpoint);
+
+ // Dictionary with values for the authorize request
+ var dic = new Dictionary();
+ dic.Add("client_id", "xamarin");
+ dic.Add("response_type", "id_token token");
+ dic.Add("scope", "openid profile basket");
+
+ dic.Add("redirect_uri", GlobalSetting.Instance.IdentityCallback);
+ dic.Add("nonce", Guid.NewGuid().ToString("N"));
+
+ // Add CSRF token to protect against cross-site request forgery attacks.
+ var currentCSRFToken = Guid.NewGuid().ToString("N");
+ dic.Add("state", currentCSRFToken);
+
+ var authorizeUri = authorizeRequest.Create(dic);
+
+ return authorizeUri;
+ }
+
+ public string CreateLogoutRequest(string token)
+ {
+ return string.Format("{0}?id_token_hint={1}&post_logout_redirect_uri={2}",
+ GlobalSetting.Instance.LogoutEndpoint,
+ token,
+ GlobalSetting.Instance.IdentityCallback);
+ }
+
+ public string DecodeToken(string token)
+ {
+ var parts = token.Split('.');
+
+ string partToConvert = parts[1];
+ partToConvert = partToConvert.Replace('-', '+');
+ partToConvert = partToConvert.Replace('_', '/');
+ switch (partToConvert.Length % 4)
+ {
+ case 0:
+ break;
+ case 2:
+ partToConvert += "==";
+ break;
+ case 3:
+ partToConvert += "=";
+ break;
+ }
+
+ var partAsBytes = Convert.FromBase64String(partToConvert);
+ var partAsUTF8String = Encoding.UTF8.GetString(partAsBytes, 0, partAsBytes.Count());
+
+ return JObject.Parse(partAsUTF8String).ToString();
+ }
+ }
+}
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/NavigationService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/NavigationService.cs
index 66a723baf..22383fdb1 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/NavigationService.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Navigation/NavigationService.cs
@@ -1,4 +1,5 @@
-using eShopOnContainers.Core.ViewModels;
+using eShopOnContainers.Core.Helpers;
+using eShopOnContainers.Core.ViewModels;
using eShopOnContainers.Core.Views;
using eShopOnContainers.ViewModels.Base;
using System;
@@ -29,7 +30,10 @@ namespace eShopOnContainers.Services
public Task InitializeAsync()
{
- return NavigateToAsync();
+ if(string.IsNullOrEmpty(Settings.AuthAccessToken))
+ return NavigateToAsync();
+ else
+ return NavigateToAsync();
}
public Task NavigateToAsync() where TViewModel : ViewModelBase
@@ -67,7 +71,7 @@ namespace eShopOnContainers.Services
public virtual Task RemoveLastFromBackStackAsync()
{
- var mainPage = CurrentApplication.MainPage as CustomNavigationPage;
+ var mainPage = CurrentApplication.MainPage as CustomNavigationView;
if (mainPage != null)
{
@@ -80,7 +84,7 @@ namespace eShopOnContainers.Services
public virtual Task RemoveBackStackAsync()
{
- var mainPage = CurrentApplication.MainPage as CustomNavigationPage;
+ var mainPage = CurrentApplication.MainPage as CustomNavigationView;
if (mainPage != null)
{
@@ -100,11 +104,11 @@ namespace eShopOnContainers.Services
if (page is LoginView)
{
- CurrentApplication.MainPage = new CustomNavigationPage(page);
+ CurrentApplication.MainPage = new CustomNavigationView(page);
}
else
{
- var navigationPage = CurrentApplication.MainPage as CustomNavigationPage;
+ var navigationPage = CurrentApplication.MainPage as CustomNavigationView;
if (navigationPage != null)
{
@@ -112,7 +116,7 @@ namespace eShopOnContainers.Services
}
else
{
- CurrentApplication.MainPage = new CustomNavigationPage(page);
+ CurrentApplication.MainPage = new CustomNavigationView(page);
}
}
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/IOrderService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/IOrderService.cs
new file mode 100644
index 000000000..5d63ea9e8
--- /dev/null
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/IOrderService.cs
@@ -0,0 +1,13 @@
+using System.Collections.ObjectModel;
+using System.Threading.Tasks;
+
+namespace eShopOnContainers.Core.Services.Order
+{
+ public interface IOrderService
+ {
+ Task CreateOrderAsync(Models.Orders.Order newOrder);
+ Task> GetOrdersAsync();
+ Task GetOrderAsync(int orderId);
+ Task> GetCardTypesAsync();
+ }
+}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs
new file mode 100644
index 000000000..4b249fbd0
--- /dev/null
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderMockService.cs
@@ -0,0 +1,61 @@
+using eShopOnContainers.Core.Extensions;
+using eShopOnContainers.Core.Models.Orders;
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Threading.Tasks;
+
+namespace eShopOnContainers.Core.Services.Order
+{
+ public class OrderMockService : IOrderService
+ {
+ private List MockOrders = new List()
+ {
+ new Models.Orders.Order { SequenceNumber = 123, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = MockOrderItems },
+ new Models.Orders.Order { SequenceNumber = 132, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = MockOrderItems },
+ new Models.Orders.Order { SequenceNumber = 231, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = MockOrderItems },
+ };
+
+ private static List MockOrderItems = new List()
+ {
+ new OrderItem { OrderId = Guid.NewGuid(), ProductId = "1", Discount = 15, ProductName = ".NET Bot Blue Sweatshirt (M)", Quantity = 1, UnitPrice = 16.50M },
+ new OrderItem { OrderId = Guid.NewGuid(), ProductId = "3", Discount = 0, ProductName = ".NET Bot Black Sweatshirt (M)", Quantity = 2, UnitPrice = 19.95M }
+ };
+
+ private static List MockCardTypes = new List()
+ {
+ new CardType { Id = 1, Name = "Amex" },
+ new CardType { Id = 2, Name = "Visa" },
+ new CardType { Id = 3, Name = "MasterCard" },
+ };
+
+ public async Task CreateOrderAsync(Models.Orders.Order newOrder)
+ {
+ await Task.Delay(500);
+
+ MockOrders.Insert(0, newOrder);
+ }
+
+ public async Task> GetOrdersAsync()
+ {
+ await Task.Delay(500);
+
+ return MockOrders.ToObservableCollection();
+ }
+
+ public async Task GetOrderAsync(int orderId)
+ {
+ await Task.Delay(500);
+
+ return MockOrders.FirstOrDefault(o => o.SequenceNumber == orderId);
+ }
+
+ public async Task> GetCardTypesAsync()
+ {
+ await Task.Delay(500);
+
+ return MockCardTypes.ToObservableCollection();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderService.cs
new file mode 100644
index 000000000..50da93209
--- /dev/null
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/Order/OrderService.cs
@@ -0,0 +1,91 @@
+using eShopOnContainers.Core.Services.RequestProvider;
+using System;
+using System.Collections.ObjectModel;
+using System.Threading.Tasks;
+
+namespace eShopOnContainers.Core.Services.Order
+{
+ public class OrderService : IOrderService
+ {
+ private readonly IRequestProvider _requestProvider;
+
+ public OrderService(IRequestProvider requestProvider)
+ {
+ _requestProvider = requestProvider;
+ }
+
+ public async Task CreateOrderAsync(Models.Orders.Order newOrder)
+ {
+ UriBuilder builder = new UriBuilder(GlobalSetting.Instance.OrdersEndpoint);
+
+ builder.Path = "api/v1/orders/new";
+
+ string uri = builder.ToString();
+
+ await _requestProvider.PostAsync(uri, newOrder);
+ }
+
+ public async Task> GetOrdersAsync()
+ {
+ try
+ {
+ UriBuilder builder = new UriBuilder(GlobalSetting.Instance.OrdersEndpoint);
+
+ builder.Path = "api/v1/orders";
+
+ string uri = builder.ToString();
+
+ ObservableCollection orders =
+ await _requestProvider.GetAsync>(uri);
+
+ return orders;
+ }
+ catch
+ {
+ return new ObservableCollection();
+ }
+ }
+
+ public async Task GetOrderAsync(int orderId)
+ {
+ try
+ {
+ UriBuilder builder = new UriBuilder(GlobalSetting.Instance.OrdersEndpoint);
+
+ builder.Path = string.Format("api/v1/orders/{0}", orderId);
+
+ string uri = builder.ToString();
+
+ Models.Orders.Order order =
+ await _requestProvider.GetAsync(uri);
+
+ return order;
+ }
+ catch
+ {
+ return new Models.Orders.Order();
+ }
+ }
+
+ public async Task> GetCardTypesAsync()
+ {
+ try
+ {
+ UriBuilder builder = new UriBuilder(GlobalSetting.Instance.OrdersEndpoint);
+
+ builder.Path = "api/v1/orders/cardtypes";
+
+ string uri = builder.ToString();
+
+ ObservableCollection cardTypes =
+ await _requestProvider.GetAsync>(uri);
+
+ return cardTypes;
+ }
+ catch
+ {
+ return new ObservableCollection();
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/IRequestProvider.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/IRequestProvider.cs
index 7c36620fa..c5846a001 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/IRequestProvider.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/IRequestProvider.cs
@@ -13,5 +13,7 @@ namespace eShopOnContainers.Core.Services.RequestProvider
Task PutAsync(string uri, TResult data);
Task PutAsync(string uri, TRequest data);
+
+ Task DeleteAsync(string uri);
}
-}
+}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/RequestProvider.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/RequestProvider.cs
index dd6a1bce5..3bc4c15e0 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/RequestProvider.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/RequestProvider/RequestProvider.cs
@@ -77,6 +77,13 @@ namespace eShopOnContainers.Core.Services.RequestProvider
return await Task.Run(() => JsonConvert.DeserializeObject(responseData, _serializerSettings));
}
+ public async Task DeleteAsync(string uri)
+ {
+ HttpClient httpClient = CreateHttpClient();
+
+ await httpClient.DeleteAsync(uri);
+ }
+
private HttpClient CreateHttpClient()
{
var httpClient = new HttpClient();
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/IUserService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/IUserService.cs
index fac0a47a1..02d310c3a 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/IUserService.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/IUserService.cs
@@ -1,12 +1,9 @@
-using eShopOnContainers.Core.Models.Orders;
-using System.Collections.Generic;
-using System.Threading.Tasks;
+using System.Threading.Tasks;
namespace eShopOnContainers.Core.Services.User
{
public interface IUserService
{
Task GetUserAsync();
- Task> GetOrdersAsync();
}
}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/UserMockService.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/UserMockService.cs
index 12c3f8e60..d273e704a 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/UserMockService.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Services/User/UserMockService.cs
@@ -1,7 +1,4 @@
-using eShopOnContainers.Core.Models.Orders;
-using System;
-using System.Collections.Generic;
-using System.Threading.Tasks;
+using System.Threading.Tasks;
namespace eShopOnContainers.Core.Services.User
{
@@ -18,31 +15,12 @@ namespace eShopOnContainers.Core.Services.User
Country = "United States"
};
- private List MockOrders = new List()
- {
- new Order { SequenceNumber = 123, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = MockOrderItems },
- new Order { SequenceNumber = 132, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = MockOrderItems },
- new Order { SequenceNumber = 231, Total = 56.40M, OrderDate = DateTime.Now, Status = OrderStatus.Delivered, OrderItems = MockOrderItems },
- };
-
- private static List MockOrderItems = new List()
- {
- new OrderItem { OrderId = Guid.NewGuid(), ProductId = "1", Discount = 15, ProductName = ".NET Bot Blue Sweatshirt (M)", Quantity = 1, UnitPrice = 16.50M },
- new OrderItem { OrderId = Guid.NewGuid(), ProductId = "3", Discount = 0, ProductName = ".NET Bot Black Sweatshirt (M)", Quantity = 2, UnitPrice = 19.95M }
- };
-
+
public async Task GetUserAsync()
{
await Task.Delay(500);
return MockUser;
}
-
- public async Task> GetOrdersAsync()
- {
- await Task.Delay(500);
-
- return MockOrders;
- }
}
}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/MessengerKeys.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/MessengerKeys.cs
index 25fd28be6..506892520 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/MessengerKeys.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/MessengerKeys.cs
@@ -15,6 +15,9 @@
public const string Filter = "Filter";
// Change selected Tab programmatically
- public const string ChangeTab = "ChangeTab";
+ public const string ChangeTab = "ChangeTab";
+
+ // Logout
+ public const string Logout = "Logout";
}
}
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs
index e1c28642a..dd269b659 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/Base/ViewModelLocator.cs
@@ -7,6 +7,8 @@ using eShopOnContainers.Core.Services.OpenUrl;
using eShopOnContainers.Core.Services.User;
using eShopOnContainers.Core.Services.RequestProvider;
using eShopOnContainers.Core.Services.Basket;
+using eShopOnContainers.Core.Services.Identity;
+using eShopOnContainers.Core.Services.Order;
namespace eShopOnContainers.ViewModels.Base
{
@@ -37,6 +39,7 @@ namespace eShopOnContainers.ViewModels.Base
RegisterSingleton();
_unityContainer.RegisterType();
_unityContainer.RegisterType();
+ _unityContainer.RegisterType();
_unityContainer.RegisterType();
_unityContainer.RegisterType();
@@ -53,28 +56,29 @@ namespace eShopOnContainers.ViewModels.Base
_unityContainer.RegisterType();
}
- public void UpdateServices(bool useMockServices)
+ public void UpdateDependencies(bool useMockServices)
{
- if (!useMockServices)
+ if (useMockServices)
{
_unityContainer.RegisterInstance(new CatalogMockService());
_unityContainer.RegisterInstance(new BasketMockService());
+ _unityContainer.RegisterInstance(new OrderMockService());
_unityContainer.RegisterInstance(new UserMockService());
- UseMockService = false;
+ UseMockService = true;
}
else
{
var requestProvider = Resolve();
_unityContainer.RegisterInstance(new CatalogService(requestProvider));
_unityContainer.RegisterInstance(new BasketService(requestProvider));
+ _unityContainer.RegisterInstance(new OrderService(requestProvider));
_unityContainer.RegisterInstance(new UserMockService());
- UseMockService = true;
+ UseMockService = false;
}
}
-
-
+
public T Resolve()
{
return _unityContainer.Resolve();
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs
index 0ffea52ad..c24f3cbba 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/BasketViewModel.cs
@@ -1,6 +1,5 @@
using eShopOnContainers.Core.Models.Basket;
using eShopOnContainers.Core.Models.Catalog;
-using eShopOnContainers.Core.Models.Orders;
using eShopOnContainers.Core.Models.User;
using eShopOnContainers.Core.Services.Basket;
using eShopOnContainers.Core.Services.User;
@@ -69,10 +68,9 @@ namespace eShopOnContainers.Core.ViewModels
{
MessagingCenter.Subscribe>(this, MessengerKeys.UpdateBasket, (sender, arg) =>
{
- BadgeCount = arg.Count;
-
foreach (var basketItem in arg)
{
+ BadgeCount += basketItem.Quantity;
AddBasketItem(basketItem);
}
});
@@ -84,7 +82,7 @@ namespace eShopOnContainers.Core.ViewModels
AddCatalogItem(arg);
});
- MessagingCenter.Subscribe(this, MessengerKeys.UpdateProduct, (sender) =>
+ MessagingCenter.Subscribe(this, MessengerKeys.UpdateProduct, (sender) =>
{
ReCalculateTotal();
});
@@ -126,12 +124,16 @@ namespace eShopOnContainers.Core.ViewModels
{
Total = 0;
+ if (BasketItems == null)
+ {
+ return;
+ }
+
foreach (var orderItem in BasketItems)
{
Total += (orderItem.Quantity * orderItem.UnitPrice);
}
-
-
+
_basketService.UpdateBasketAsync(new CustomerBasket
{
BuyerId = _user.GuidUser,
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs
index e842f310f..b42fd9b67 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/CheckoutViewModel.cs
@@ -11,6 +11,8 @@ using System.Collections.ObjectModel;
using System.Linq;
using eShopOnContainers.Core.Models.Basket;
using System.Collections.Generic;
+using eShopOnContainers.Core.Services.Basket;
+using eShopOnContainers.Core.Services.Order;
namespace eShopOnContainers.Core.ViewModels
{
@@ -21,10 +23,16 @@ namespace eShopOnContainers.Core.ViewModels
private User _user;
private IUserService _userService;
+ private IBasketService _basketService;
+ private IOrderService _orderService;
- public CheckoutViewModel(IUserService userService)
+ public CheckoutViewModel(IUserService userService,
+ IBasketService basketService,
+ IOrderService orderService)
{
+ _basketService = basketService;
_userService = userService;
+ _orderService = orderService;
}
public ObservableCollection OrderItems
@@ -86,10 +94,13 @@ namespace eShopOnContainers.Core.ViewModels
private async void Checkout()
{
+ await _orderService.CreateOrderAsync(Order);
+ await _basketService.ClearBasketAsync(User.GuidUser);
+
await NavigationService.NavigateToAsync(new TabParameter { TabIndex = 1 });
await NavigationService.RemoveLastFromBackStackAsync();
- await DialogService.ShowAlertAsync("Order sent successfully", string.Format("Order {0}", Order.OrderNumber), "Ok");
+ await DialogService.ShowAlertAsync("Order sent successfully!", string.Format("Order {0}", Order.OrderNumber), "Ok");
await NavigationService.RemoveLastFromBackStackAsync();
}
@@ -124,4 +135,4 @@ namespace eShopOnContainers.Core.ViewModels
return total;
}
}
-}
+}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs
index 2381d0958..67a6b4734 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/LoginViewModel.cs
@@ -1,6 +1,10 @@
-using eShopOnContainers.Core.Services.OpenUrl;
+using eShopOnContainers.Core.Helpers;
+using eShopOnContainers.Core.Services.Identity;
+using eShopOnContainers.Core.Services.OpenUrl;
using eShopOnContainers.Core.Validations;
+using eShopOnContainers.Core.ViewModels.Base;
using eShopOnContainers.ViewModels.Base;
+using IdentityModel.Client;
using System;
using System.Diagnostics;
using System.Threading.Tasks;
@@ -13,17 +17,24 @@ namespace eShopOnContainers.Core.ViewModels
{
private ValidatableObject _userName;
private ValidatableObject _password;
+ private bool _isMock;
private bool _isValid;
+ private string _authUrl;
private IOpenUrlService _openUrlService;
+ private IIdentityService _identityService;
- public LoginViewModel(IOpenUrlService openUrlService)
+ public LoginViewModel(IOpenUrlService openUrlService,
+ IIdentityService identityService)
{
_openUrlService = openUrlService;
+ _identityService = identityService;
_userName = new ValidatableObject();
_password = new ValidatableObject();
+ IsMock = ViewModelLocator.Instance.UseMockService;
+
AddValidations();
}
@@ -53,6 +64,19 @@ namespace eShopOnContainers.Core.ViewModels
}
}
+ public bool IsMock
+ {
+ get
+ {
+ return _isMock;
+ }
+ set
+ {
+ _isMock = value;
+ RaisePropertyChanged(() => IsMock);
+ }
+ }
+
public bool IsValid
{
get
@@ -66,11 +90,38 @@ namespace eShopOnContainers.Core.ViewModels
}
}
- public ICommand SignInCommand => new Command(SignInAsync);
+ public string LoginUrl
+ {
+ get
+ {
+ return _authUrl;
+ }
+ set
+ {
+ _authUrl = value;
+ RaisePropertyChanged(() => LoginUrl);
+ }
+ }
+
+ public ICommand MockSignInCommand => new Command(MockSignInAsync);
+
+ public ICommand SignInCommand => new Command(async () => await SignInAsync());
public ICommand RegisterCommand => new Command(Register);
- private async void SignInAsync()
+ public ICommand NavigateCommand => new Command(NavigateAsync);
+
+ public override Task InitializeAsync(object navigationData)
+ {
+ MessagingCenter.Subscribe(this, MessengerKeys.Logout, (sender) =>
+ {
+ Logout();
+ });
+
+ return base.InitializeAsync(navigationData);
+ }
+
+ private async void MockSignInAsync()
{
IsBusy = true;
IsValid = true;
@@ -104,9 +155,57 @@ namespace eShopOnContainers.Core.ViewModels
IsBusy = false;
}
+ private async Task SignInAsync()
+ {
+ IsBusy = true;
+
+ await Task.Delay(500);
+
+ LoginUrl = _identityService.CreateAuthorizeRequest();
+
+ IsValid = true;
+
+ IsBusy = false;
+ }
+
private void Register()
{
- _openUrlService.OpenUrl(GlobalSetting.RegisterWebsite);
+ _openUrlService.OpenUrl(GlobalSetting.Instance.RegisterWebsite);
+ }
+
+ private void Logout()
+ {
+ var token = Settings.AuthAccessToken;
+ var logoutRequest = _identityService.CreateLogoutRequest(token);
+
+ if(string.IsNullOrEmpty(logoutRequest))
+ {
+ IsValid = false;
+ LoginUrl = logoutRequest;
+ Settings.AuthAccessToken = string.Empty;
+ }
+ }
+
+ private async void NavigateAsync(string url)
+ {
+ if (url.Contains(GlobalSetting.Instance.IdentityCallback))
+ {
+ // Parse response
+ var authResponse = new AuthorizeResponse(url);
+
+ if (!string.IsNullOrWhiteSpace(authResponse.AccessToken))
+ {
+ string decodedTokens = _identityService.DecodeToken(authResponse.AccessToken);
+
+ if(decodedTokens != null)
+ {
+ Settings.AuthAccessToken = decodedTokens;
+
+ await NavigationService.NavigateToAsync();
+ await NavigationService.RemoveLastFromBackStackAsync();
+ }
+ }
+ }
}
private bool Validate()
@@ -123,4 +222,4 @@ namespace eShopOnContainers.Core.ViewModels
_password.Validations.Add(new IsNotNullOrEmptyRule { ValidationMessage = "Password should not be empty" });
}
}
-}
+}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/ProfileViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/ProfileViewModel.cs
index fe69f36a4..43f4d29da 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/ProfileViewModel.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/ProfileViewModel.cs
@@ -1,6 +1,7 @@
using eShopOnContainers.Core.Extensions;
using eShopOnContainers.Core.Models.Orders;
-using eShopOnContainers.Core.Services.User;
+using eShopOnContainers.Core.Services.Order;
+using eShopOnContainers.Core.ViewModels.Base;
using eShopOnContainers.ViewModels.Base;
using System.Collections.ObjectModel;
using System.Threading.Tasks;
@@ -13,11 +14,11 @@ namespace eShopOnContainers.Core.ViewModels
{
private ObservableCollection _orders;
- private IUserService _userService;
+ private IOrderService _orderService;
- public ProfileViewModel(IUserService userService)
+ public ProfileViewModel(IOrderService orderService)
{
- _userService = userService;
+ _orderService = orderService;
}
public ObservableCollection Orders
@@ -38,7 +39,7 @@ namespace eShopOnContainers.Core.ViewModels
{
IsBusy = true;
- var orders = await _userService.GetOrdersAsync();
+ var orders = await _orderService.GetOrdersAsync();
Orders = orders.ToObservableCollection();
IsBusy = false;
@@ -48,6 +49,7 @@ namespace eShopOnContainers.Core.ViewModels
{
IsBusy = true;
+ MessagingCenter.Send(this, MessengerKeys.Logout);
await NavigationService.NavigateToAsync();
await NavigationService.RemoveBackStackAsync();
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs
index 2cdacb480..77e0dbf9b 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/ViewModels/SettingsViewModel.cs
@@ -9,11 +9,12 @@ namespace eShopOnContainers.Core.ViewModels
{
private string _title;
private string _description;
- private bool _useMockServices;
+ private bool _useAzureServices;
+ private string _endpoint;
public SettingsViewModel()
{
- UseMockServices = ViewModelLocator.Instance.UseMockService;
+ UseAzureServices = !ViewModelLocator.Instance.UseMockService;
}
public string Title
@@ -36,13 +37,29 @@ namespace eShopOnContainers.Core.ViewModels
}
}
- public bool UseMockServices
+ public bool UseAzureServices
{
- get { return _useMockServices; }
+ get { return _useAzureServices; }
set
{
- _useMockServices = value;
- RaisePropertyChanged(() => UseMockServices);
+ _useAzureServices = value;
+ RaisePropertyChanged(() => UseAzureServices);
+ }
+ }
+
+ public string Endpoint
+ {
+ get { return _endpoint; }
+ set
+ {
+ _endpoint = value;
+
+ if(!string.IsNullOrEmpty(_endpoint))
+ {
+ UpdateEndpoint(_endpoint);
+ }
+
+ RaisePropertyChanged(() => Endpoint);
}
}
@@ -50,7 +67,7 @@ namespace eShopOnContainers.Core.ViewModels
private void MockServices()
{
- ViewModelLocator.Instance.UpdateServices(UseMockServices);
+ ViewModelLocator.Instance.UpdateDependencies(!UseAzureServices);
UpdateInfo();
}
@@ -58,12 +75,14 @@ namespace eShopOnContainers.Core.ViewModels
{
UpdateInfo();
+ Endpoint = GlobalSetting.Instance.BaseEndpoint;
+
return base.InitializeAsync(navigationData);
}
private void UpdateInfo()
{
- if (!UseMockServices)
+ if (!UseAzureServices)
{
Title = "Use Mock Services";
Description = "Mock Services are simulated objects that mimic the behavior of real services in controlled ways";
@@ -74,5 +93,10 @@ namespace eShopOnContainers.Core.ViewModels
Description = "Azure Services are real objects that required a valid internet connection";
}
}
+
+ private void UpdateEndpoint(string endpoint)
+ {
+ GlobalSetting.Instance.BaseEndpoint = endpoint;
+ }
}
}
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CatalogView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CatalogView.xaml
index fd51414b6..870980ac2 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CatalogView.xaml
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CatalogView.xaml
@@ -58,7 +58,8 @@
+ BackgroundColor="{StaticResource LightGreenColor}"
+ IsEnabled="{Binding Products.Count, Converter={StaticResource CountToBoolConverter}}">
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CheckoutView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CheckoutView.xaml
index 2cc066c56..0fe1cd300 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CheckoutView.xaml
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CheckoutView.xaml
@@ -176,7 +176,8 @@
-
-
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CustomNavigationView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CustomNavigationView.xaml
new file mode 100644
index 000000000..ec1d9ce83
--- /dev/null
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CustomNavigationView.xaml
@@ -0,0 +1,9 @@
+
+
+
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CustomNavigationPage.xaml.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CustomNavigationView.xaml.cs
similarity index 52%
rename from src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CustomNavigationPage.xaml.cs
rename to src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CustomNavigationView.xaml.cs
index a93f579ea..54fe9af54 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CustomNavigationPage.xaml.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/CustomNavigationView.xaml.cs
@@ -2,14 +2,14 @@
namespace eShopOnContainers.Core.Views
{
- public partial class CustomNavigationPage : NavigationPage
+ public partial class CustomNavigationView : NavigationPage
{
- public CustomNavigationPage() : base()
+ public CustomNavigationView() : base()
{
InitializeComponent();
}
- public CustomNavigationPage(Page root) : base(root)
+ public CustomNavigationView(Page root) : base(root)
{
InitializeComponent();
}
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/LoginView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/LoginView.xaml
index a078de3c6..968305356 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/LoginView.xaml
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/LoginView.xaml
@@ -3,8 +3,14 @@
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="eShopOnContainers.Core.Views.LoginView"
xmlns:animations="clr-namespace:eShopOnContainers.Core.Animations;assembly=eShopOnContainers.Core"
- xmlns:triggers="clr-namespace:eShopOnContainers.Core.Triggers;assembly=eShopOnContainers.Core"
- Title="eShop on Containers">
+ xmlns:triggers="clr-namespace:eShopOnContainers.Core.Triggers;assembly=eShopOnContainers.Core"
+ xmlns:behaviors="clr-namespace:eShopOnContainers.Core.Behaviors;assembly=eShopOnContainers.Core">
+
+
+
@@ -46,6 +52,25 @@
Value="Center" />
+
+
+
+
@@ -53,7 +78,7 @@
Direction="Up"
Duration="1500" />
-
+
@@ -65,8 +90,10 @@
+
@@ -154,6 +181,55 @@
Padding="0"
ColumnSpacing="0"
RowSpacing="0">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -163,6 +239,37 @@
NumberOfTapsRequired="1" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ BarTextColor="{StaticResource WhiteColor}">
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml
index f28f121c1..b13a4855d 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml
@@ -43,6 +43,18 @@
Value="12, 12, 12, 0" />
+
+
@@ -82,6 +94,7 @@
+
@@ -121,10 +134,31 @@
WinPhone="Assets/switchOff.png"/>
-
+
+
+
+
+
+
+
+
+
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml.cs b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml.cs
index f7ad31a47..e57c8fd32 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml.cs
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/SettingsView.xaml.cs
@@ -1,10 +1,4 @@
-using System;
-using System.Collections.Generic;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-
-using Xamarin.Forms;
+using Xamarin.Forms;
namespace eShopOnContainers.Core.Views
{
diff --git a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/Templates/BasketItemTemplate.xaml b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/Templates/BasketItemTemplate.xaml
index 48ec265a9..76c37db3c 100644
--- a/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/Templates/BasketItemTemplate.xaml
+++ b/src/Mobile/eShopOnContainers/eShopOnContainers.Core/Views/Templates/BasketItemTemplate.xaml
@@ -56,6 +56,8 @@