Merge branch 'xamarin-oidcclient' into bff

# Conflicts:
#	.dockerignore
#	docker-compose.override.yml
#	docker-compose.yml
#	eShopOnContainers-ServicesAndWebApps.sln
#	k8s/deploy.ps1
#	k8s/deployments.yaml
#	k8s/frontend.yaml
#	src/Services/Identity/Identity.API/Data/ConfigurationDbContextSeed.cs
#	src/Services/Ordering/Ordering.Domain/AggregatesModel/OrderAggregate/Order.cs
This commit is contained in:
eiximenis 2018-03-23 12:37:12 +01:00
commit 0e119eac86
218 changed files with 9019 additions and 4122 deletions

View File

@ -30,4 +30,5 @@ cli-linux
**/bower_components/
**/wwwroot/lib/
global.json
**/appsettings.localhost.json
**/appsettings.localhost.json
src/Web/WebSPA/wwwroot/

1
.gitignore vendored
View File

@ -260,3 +260,4 @@ pub/
/src/Web/WebMVC/wwwroot/lib
/src/Web/WebMVC/wwwroot/css/site.min.css
**/.kube/**
.mfractor

View File

@ -66,7 +66,7 @@ You can download them and start reviewing these Guides/eBooks here:
| <a href='https://aka.ms/microservicesebook'><img src="img/ebook_arch_dev_microservices_containers_cover.png"> </a> | <a href='https://aka.ms/dockerlifecycleebook'> <img src="img/ebook_containers_lifecycle.png"> </a> | <a href='https://aka.ms/xamarinpatternsebook'> <img src="img/xamarin-enterprise-patterns-ebook-cover-small.png"> </a> |
| <sup> <a href='https://aka.ms/microservicesebook'>**Download .PDF** (2nd Edition)</a> </sup> | <sup> <a href='https://aka.ms/dockerlifecycleebook'>**Download** </a> </sup> | <sup> <a href='https://aka.ms/xamarinpatternsebook'>**Download** </a> </sup> |
Download in other formats (**eReaders** like **MOBI**, **EPUB**) and other eBooks at the [.NET Architecture center](dot.net/architecture).
Download in other formats (**eReaders** like **MOBI**, **EPUB**) and other eBooks at the [.NET Architecture center](http://dot.net/architecture).
Send feedback to [dotnet-architecture-ebooks-feedback@service.microsoft.com](dotnet-architecture-ebooks-feedback@service.microsoft.com)

View File

@ -5,6 +5,7 @@
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Parameters>
<Parameter Name="OrderingBackground_InstanceCount" DefaultValue="-1" />
<Parameter Name="MarketingApi_InstanceCount" DefaultValue="-1" />
<Parameter Name="LocationsApi_InstanceCount" DefaultValue="-1" />
<Parameter Name="PaymentApi_InstanceCount" DefaultValue="-1" />
@ -19,6 +20,18 @@
<!-- Import the ServiceManifest from the ServicePackage. The ServiceManifestName and ServiceManifestVersion
should match the Name and Version attributes of the ServiceManifest element defined in the
ServiceManifest.xml file. -->
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="OrderingBackgroundPkg" ServiceManifestVersion="1.0.0" />
<ConfigOverrides />
<EnvironmentOverrides CodePackageRef="Code">
<EnvironmentVariable Name="ApplicationInsights__InstrumentationKey" Value="[InstrumentationKey]"/>
</EnvironmentOverrides>
<Policies>
<ContainerHostPolicies CodePackageRef="Code">
<PortBinding ContainerPort="80" EndpointRef="OrderingBackgroundTypeEndpoint"/>
</ContainerHostPolicies>
</Policies>
</ServiceManifestImport>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="MarketingApiPkg" ServiceManifestVersion="1.0.0" />
@ -99,6 +112,11 @@
ServiceFabric PowerShell module.
The attribute ServiceTypeName below must match the name defined in the imported ServiceManifest.xml file. -->
<Service Name="OrderingBackground" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="OrderingBackgroundType" InstanceCount="[OrderingBackground_InstanceCount]">
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="MarketingApi" ServiceDnsName="marketingapi.eshoponservicefabric" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="MarketingApiType" InstanceCount="[MarketingApi_InstanceCount]">

View File

@ -28,8 +28,6 @@
<EnvironmentVariable Name="EventBusConnection" Value="rabbitmq.eshoponservicefabricbus"/>
<EnvironmentVariable Name="AzureServiceBusEnabled" Value="False"/>
<EnvironmentVariable Name="UseCustomizationData" Value="True"/>
<EnvironmentVariable Name="GracePeriodTime" Value="1"/>
<EnvironmentVariable Name="CheckUpdateTime" Value="30000"/>
<EnvironmentVariable Name="ApplicationInsights__InstrumentationKey" Value=""/>
<EnvironmentVariable Name="OrchestratorType" Value="SF"/>
<EnvironmentVariable Name="UseLoadTest" Value="True"/>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8" ?>
<Settings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
<!-- Add your custom configuration sections and parameters here -->
<!--
<Section Name="MyConfigSection">
<Parameter Name="MyParameter" Value="Value1" />
</Section>
-->
</Settings>

View File

@ -0,0 +1,48 @@
<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest Name="OrderingBackgroundPkg"
Version="1.0.0"
xmlns="http://schemas.microsoft.com/2011/01/fabric"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ServiceTypes>
<!-- This is the name of your ServiceType.
The UseImplicitHost attribute indicates this is a guest service. -->
<StatelessServiceType ServiceTypeName="OrderingBackgroundType" UseImplicitHost="true" />
</ServiceTypes>
<!-- Code package is your service executable. -->
<CodePackage Name="Code" Version="1.0.0">
<EntryPoint>
<!-- Follow this link for more information about deploying Windows containers to Service Fabric: https://aka.ms/sfguestcontainers -->
<ContainerHost>
<ImageName>eshop/ordering.backgroundtasks</ImageName>
</ContainerHost>
</EntryPoint>
<!-- Pass environment variables to your container: -->
<EnvironmentVariables>
<EnvironmentVariable Name="ASPNETCORE_ENVIRONMENT" Value="Development"/>
<EnvironmentVariable Name="ASPNETCORE_URLS" Value="http://0.0.0.0:80"/>
<EnvironmentVariable Name="ConnectionString" Value="Data Source=sqlserver.eshoponservicefabricsql,5433;Database=Microsoft.eShopOnContainers.Services.OrderingDb;User Id=sa;Password=Pass@word"/>
<EnvironmentVariable Name="EventBusConnection" Value="rabbitmq.eshoponservicefabricbus"/>
<EnvironmentVariable Name="AzureServiceBusEnabled" Value="False"/>
<EnvironmentVariable Name="GracePeriodTime" Value="1"/>
<EnvironmentVariable Name="CheckUpdateTime" Value="30000"/>
<EnvironmentVariable Name="ApplicationInsights__InstrumentationKey" Value=""/>
<EnvironmentVariable Name="OrchestratorType" Value="SF"/>
<EnvironmentVariable Name="UseLoadTest" Value="True"/>
</EnvironmentVariables>
</CodePackage>
<!-- Config package is the contents of the Config directoy under PackageRoot that contains an
independently-updateable and versioned set of custom configuration settings for your service. -->
<ConfigPackage Name="Config" Version="1.0.0" />
<Resources>
<Endpoints>
<!-- This endpoint is used by the communication listener to obtain the port on which to
listen. Please note that if your service is partitioned, this port is shared with
replicas of different partitions that are placed in your code. -->
<Endpoint Name="OrderingBackgroundTypeEndpoint" Port="5111" UriScheme="http"/>
</Endpoints>
</Resources>
</ServiceManifest>

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Application Name="fabric:/eShopOnServiceFabric" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Parameters>
<Parameter Name="OrderingBackground_InstanceCount" Value="-1" />
<Parameter Name="MarketingApi_InstanceCount" Value="1" />
<Parameter Name="LocationsApi_InstanceCount" Value="1" />
<Parameter Name="PaymentApi_InstanceCount" Value="1" />

View File

@ -38,6 +38,8 @@
<Content Include="ApplicationPackageRoot\MarketingApiPkg\ServiceManifest.xml" />
<Content Include="ApplicationPackageRoot\OrderingApiPkg\Config\Settings.xml" />
<Content Include="ApplicationPackageRoot\OrderingApiPkg\ServiceManifest.xml" />
<Content Include="ApplicationPackageRoot\OrderingBackgroundPkg\Config\Settings.xml" />
<Content Include="ApplicationPackageRoot\OrderingBackgroundPkg\ServiceManifest.xml" />
<Content Include="ApplicationPackageRoot\PaymentApiPkg\Config\Settings.xml" />
<Content Include="ApplicationPackageRoot\PaymentApiPkg\ServiceManifest.xml" />
<Content Include="packages.config" />

View File

@ -5,6 +5,7 @@
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Parameters>
<Parameter Name="OrderingBackground_InstanceCount" DefaultValue="-1" />
<Parameter Name="MarketingApi_InstanceCount" DefaultValue="-1" />
<Parameter Name="LocationsApi_InstanceCount" DefaultValue="-1" />
<Parameter Name="PaymentApi_InstanceCount" DefaultValue="-1" />
@ -19,6 +20,18 @@
<!-- Import the ServiceManifest from the ServicePackage. The ServiceManifestName and ServiceManifestVersion
should match the Name and Version attributes of the ServiceManifest element defined in the
ServiceManifest.xml file. -->
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="OrderingBackgroundPkg" ServiceManifestVersion="1.0.0" />
<ConfigOverrides />
<EnvironmentOverrides CodePackageRef="Code">
<EnvironmentVariable Name="ApplicationInsights:InstrumentationKey" Value="[InstrumentationKey]"/>
</EnvironmentOverrides>
<Policies>
<ContainerHostPolicies CodePackageRef="Code">
<PortBinding ContainerPort="80" EndpointRef="OrderingBackgroundTasksTypeEndpoint"/>
</ContainerHostPolicies>
</Policies>
</ServiceManifestImport>
<ServiceManifestImport>
<ServiceManifestRef ServiceManifestName="MarketingApiPkg" ServiceManifestVersion="1.0.0" />
@ -99,6 +112,11 @@
ServiceFabric PowerShell module.
The attribute ServiceTypeName below must match the name defined in the imported ServiceManifest.xml file. -->
<Service Name="OrderingBackground" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="OrderingBackgroundType" InstanceCount="[OrderingBackground_InstanceCount]">
<SingletonPartition />
</StatelessService>
</Service>
<Service Name="MarketingApi" ServiceDnsName="marketingapi.eshoponservicefabric" ServicePackageActivationMode="ExclusiveProcess">
<StatelessService ServiceTypeName="MarketingApiType" InstanceCount="[MarketingApi_InstanceCount]">

View File

@ -28,8 +28,6 @@
<EnvironmentVariable Name="EventBusConnection" Value="rabbitmq.eshoponservicefabricbus"/>
<EnvironmentVariable Name="AzureServiceBusEnabled" Value="False"/>
<EnvironmentVariable Name="UseCustomizationData" Value="True"/>
<EnvironmentVariable Name="GracePeriodTime" Value="1"/>
<EnvironmentVariable Name="CheckUpdateTime" Value="30000"/>
<EnvironmentVariable Name="EventBusUserName" Value="admin"/>
<EnvironmentVariable Name="EventBusPassword" Value="password"/>
<EnvironmentVariable Name="ApplicationInsights:InstrumentationKey" Value=""/>

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8" ?>
<Settings xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.microsoft.com/2011/01/fabric">
<!-- Add your custom configuration sections and parameters here -->
<!--
<Section Name="MyConfigSection">
<Parameter Name="MyParameter" Value="Value1" />
</Section>
-->
</Settings>

View File

@ -0,0 +1,50 @@
<?xml version="1.0" encoding="utf-8"?>
<ServiceManifest Name="OrderingBackgroundPkg"
Version="1.0.0"
xmlns="http://schemas.microsoft.com/2011/01/fabric"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<ServiceTypes>
<!-- This is the name of your ServiceType.
The UseImplicitHost attribute indicates this is a guest service. -->
<StatelessServiceType ServiceTypeName="OrderingBackgroundType" UseImplicitHost="true" />
</ServiceTypes>
<!-- Code package is your service executable. -->
<CodePackage Name="Code" Version="1.0.0">
<EntryPoint>
<!-- Follow this link for more information about deploying Windows containers to Service Fabric: https://aka.ms/sfguestcontainers -->
<ContainerHost>
<ImageName>eshop/ordering.backgroundtasks-win</ImageName>
</ContainerHost>
</EntryPoint>
<!-- Pass environment variables to your container: -->
<EnvironmentVariables>
<EnvironmentVariable Name="ASPNETCORE_ENVIRONMENT" Value="Development"/>
<EnvironmentVariable Name="ASPNETCORE_URLS" Value="http://0.0.0.0:80"/>
<EnvironmentVariable Name="ConnectionString" Value="Data Source=sqlserver.eshoponservicefabricsql,5433;Database=Microsoft.eShopOnContainers.Services.OrderingDb;User Id=sa;Password=Pass@word"/>
<EnvironmentVariable Name="EventBusConnection" Value="rabbitmq.eshoponservicefabricbus"/>
<EnvironmentVariable Name="AzureServiceBusEnabled" Value="False"/>
<EnvironmentVariable Name="GracePeriodTime" Value="1"/>
<EnvironmentVariable Name="CheckUpdateTime" Value="30000"/>
<EnvironmentVariable Name="EventBusUserName" Value="admin"/>
<EnvironmentVariable Name="EventBusPassword" Value="password"/>
<EnvironmentVariable Name="ApplicationInsights:InstrumentationKey" Value=""/>
<EnvironmentVariable Name="OrchestratorType" Value="SF"/>
<EnvironmentVariable Name="UseLoadTest" Value="False"/>
</EnvironmentVariables>
</CodePackage>
<!-- Config package is the contents of the Config directoy under PackageRoot that contains an
independently-updateable and versioned set of custom configuration settings for your service. -->
<ConfigPackage Name="Config" Version="1.0.0" />
<Resources>
<Endpoints>
<!-- This endpoint is used by the communication listener to obtain the port on which to
listen. Please note that if your service is partitioned, this port is shared with
replicas of different partitions that are placed in your code. -->
<Endpoint Name="OrderingBackgroundTasksTypeEndpoint" Port="5111" UriScheme="http" PathSuffix="eShopOnServiceFabric/OrderingBackgroundTasks"/>
</Endpoints>
</Resources>
</ServiceManifest>

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<Application Name="fabric:/eShopOnServiceFabric" xmlns="http://schemas.microsoft.com/2011/01/fabric" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Parameters>
<Parameter Name="OrderingBackground_InstanceCount" Value="-1" />
<Parameter Name="MarketingApi_InstanceCount" Value="1" />
<Parameter Name="LocationsApi_InstanceCount" Value="1" />
<Parameter Name="PaymentApi_InstanceCount" Value="1" />

View File

@ -38,6 +38,8 @@
<Content Include="ApplicationPackageRoot\MarketingApiPkg\ServiceManifest.xml" />
<Content Include="ApplicationPackageRoot\OrderingApiPkg\Config\Settings.xml" />
<Content Include="ApplicationPackageRoot\OrderingApiPkg\ServiceManifest.xml" />
<Content Include="ApplicationPackageRoot\OrderingBackgroundPkg\Config\Settings.xml" />
<Content Include="ApplicationPackageRoot\OrderingBackgroundPkg\ServiceManifest.xml" />
<Content Include="ApplicationPackageRoot\PaymentApiPkg\Config\Settings.xml" />
<Content Include="ApplicationPackageRoot\PaymentApiPkg\ServiceManifest.xml" />
<Content Include="packages.config" />

View File

@ -0,0 +1,13 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27323.2
MinimumVisualStudioVersion = 10.0.40219.1
Global
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {04B6E659-060F-4550-A5CA-70B9E9D8F010}
EndGlobalSection
EndGlobal

View File

@ -2,6 +2,9 @@
"$schema": "http://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
"contentVersion": "1.0.0.0",
"parameters": {
"prefix": {
"type": "string"
},
"clusterLocation": {
"type": "string",
"metadata": {
@ -233,13 +236,16 @@
"publicIPApiVersion": "2015-06-15",
"vnetID": "[resourceId('Microsoft.Network/virtualNetworks',parameters('virtualNetworkName'))]",
"subnet0Ref": "[concat(variables('vnetID'),'/subnets/',parameters('subnet0Name'))]",
"lbID0": "[resourceId('Microsoft.Network/loadBalancers', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]",
"lbID0": "[resourceId('Microsoft.Network/loadBalancers', concat('LB','-', variables('clusterName'),'-',parameters('vmNodeType0Name')))]",
"lbIPConfig0": "[concat(variables('lbID0'),'/frontendIPConfigurations/LoadBalancerIPConfig')]",
"lbPoolID0": "[concat(variables('lbID0'),'/backendAddressPools/LoadBalancerBEAddressPool')]",
"lbProbeID0": "[concat(variables('lbID0'),'/probes/FabricGatewayProbe')]",
"lbHttpProbeID0": "[concat(variables('lbID0'),'/probes/FabricHttpGatewayProbe')]",
"lbNatPoolID0": "[concat(variables('lbID0'),'/inboundNatPools/LoadBalancerBEAddressNatPool')]",
"vmStorageAccountName0": "[toLower(concat(uniqueString(resourceGroup().id), '1', '0' ))]",
"supportLogStorageAccountName": "[take(concat(parameters('prefix'), parameters('supportLogStorageAccountName')),22)]",
"applicationDiagnosticsStorageAccountName" : "[take(concat(parameters('prefix'), parameters('applicationDiagnosticsStorageAccountName')),22)]",
"clusterName": "[concat(parameters('prefix'), parameters('clusterName'))]",
"uniqueStringArray0": [
"[concat(variables('vmStorageAccountName0'), '0')]",
"[concat(variables('vmStorageAccountName0'), '1')]",
@ -252,7 +258,7 @@
{
"apiVersion": "[variables('storageApiVersion')]",
"type": "Microsoft.Storage/storageAccounts",
"name": "[parameters('supportLogStorageAccountName')]",
"name": "[variables('supportLogStorageAccountName')]",
"location": "[parameters('computeLocation')]",
"dependsOn": [],
"properties": {},
@ -262,13 +268,13 @@
},
"tags": {
"resourceType": "Service Fabric",
"clusterName": "[parameters('clusterName')]"
"clusterName": "[variables('clusterName')]"
}
},
{
"apiVersion": "[variables('storageApiVersion')]",
"type": "Microsoft.Storage/storageAccounts",
"name": "[parameters('applicationDiagnosticsStorageAccountName')]",
"name": "[variables('applicationDiagnosticsStorageAccountName')]",
"location": "[parameters('computeLocation')]",
"dependsOn": [],
"properties": {},
@ -278,7 +284,7 @@
},
"tags": {
"resourceType": "Service Fabric",
"clusterName": "[parameters('clusterName')]"
"clusterName": "[variables('clusterName')]"
}
},
{
@ -304,7 +310,7 @@
},
"tags": {
"resourceType": "Service Fabric",
"clusterName": "[parameters('clusterName')]"
"clusterName": "[variables('clusterName')]"
}
},
{
@ -320,13 +326,13 @@
},
"tags": {
"resourceType": "Service Fabric",
"clusterName": "[parameters('clusterName')]"
"clusterName": "[variables('clusterName')]"
}
},
{
"apiVersion": "[variables('lbApiVersion')]",
"type": "Microsoft.Network/loadBalancers",
"name": "[concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name'))]",
"name": "[concat('LB','-', variables('clusterName'),'-',parameters('vmNodeType0Name'))]",
"location": "[parameters('computeLocation')]",
"dependsOn": [
"[concat('Microsoft.Network/publicIPAddresses/',concat(parameters('lbIPName'),'-','0'))]"
@ -600,7 +606,7 @@
},
"tags": {
"resourceType": "Service Fabric",
"clusterName": "[parameters('clusterName')]"
"clusterName": "[variables('clusterName')]"
}
},
{
@ -620,7 +626,7 @@
},
"tags": {
"resourceType": "Service Fabric",
"clusterName": "[parameters('clusterName')]"
"clusterName": "[variables('clusterName')]"
}
},
{
@ -635,9 +641,9 @@
"[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[2])]",
"[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[3])]",
"[concat('Microsoft.Storage/storageAccounts/', variables('uniqueStringArray0')[4])]",
"[concat('Microsoft.Network/loadBalancers/', concat('LB','-', parameters('clusterName'),'-',parameters('vmNodeType0Name')))]",
"[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]",
"[concat('Microsoft.Storage/storageAccounts/', parameters('applicationDiagnosticsStorageAccountName'))]"
"[concat('Microsoft.Network/loadBalancers/', concat('LB','-', variables('clusterName'),'-',parameters('vmNodeType0Name')))]",
"[concat('Microsoft.Storage/storageAccounts/', variables('supportLogStorageAccountName'))]",
"[concat('Microsoft.Storage/storageAccounts/', variables('applicationDiagnosticsStorageAccountName'))]"
],
"properties": {
"overprovision": "[parameters('overProvision')]",
@ -653,12 +659,12 @@
"type": "ServiceFabricNode",
"autoUpgradeMinorVersion": true,
"protectedSettings": {
"StorageAccountKey1": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key1]",
"StorageAccountKey2": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('supportLogStorageAccountName')),'2015-05-01-preview').key2]"
"StorageAccountKey1": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('supportLogStorageAccountName')),'2015-05-01-preview').key1]",
"StorageAccountKey2": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('supportLogStorageAccountName')),'2015-05-01-preview').key2]"
},
"publisher": "Microsoft.Azure.ServiceFabric",
"settings": {
"clusterEndpoint": "[reference(parameters('clusterName')).clusterEndpoint]",
"clusterEndpoint": "[reference(variables('clusterName')).clusterEndpoint]",
"nodeTypeRef": "[parameters('vmNodeType0Name')]",
"dataPath": "D:\\\\SvcFab",
"durabilityLevel": "Bronze",
@ -674,8 +680,8 @@
"type": "IaaSDiagnostics",
"autoUpgradeMinorVersion": true,
"protectedSettings": {
"storageAccountName": "[parameters('applicationDiagnosticsStorageAccountName')]",
"storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', parameters('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]",
"storageAccountName": "[variables('applicationDiagnosticsStorageAccountName')]",
"storageAccountKey": "[listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('applicationDiagnosticsStorageAccountName')),'2015-05-01-preview').key1]",
"storageAccountEndPoint": "https://core.windows.net/"
},
"publisher": "Microsoft.Azure.Diagnostics",
@ -715,7 +721,7 @@
}
}
},
"StorageAccount": "[parameters('applicationDiagnosticsStorageAccountName')]"
"StorageAccount": "[variables('applicationDiagnosticsStorageAccountName')]"
},
"typeHandlerVersion": "1.5"
}
@ -786,16 +792,16 @@
},
"tags": {
"resourceType": "Service Fabric",
"clusterName": "[parameters('clusterName')]"
"clusterName": "[variables('clusterName')]"
}
},
{
"apiVersion": "2017-07-01-preview",
"type": "Microsoft.ServiceFabric/clusters",
"name": "[parameters('clusterName')]",
"name": "[variables('clusterName')]",
"location": "[parameters('clusterLocation')]",
"dependsOn": [
"[concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName'))]"
"[concat('Microsoft.Storage/storageAccounts/', variables('supportLogStorageAccountName'))]"
],
"properties": {
"addonFeatures": [
@ -803,14 +809,14 @@
],
"clientCertificateCommonNames": [],
"clientCertificateThumbprints": [],
"clusterCodeVersion": "5.7.207.9494",
"clusterCodeVersion": "6.0.232.9494",
"clusterState": "Default",
"diagnosticsStorageAccountConfig": {
"blobEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.blob]",
"blobEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', variables('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.blob]",
"protectedAccountKeyName": "StorageAccountKey1",
"queueEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.queue]",
"storageAccountName": "[parameters('supportLogStorageAccountName')]",
"tableEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', parameters('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.table]"
"queueEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', variables('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.queue]",
"storageAccountName": "[variables('supportLogStorageAccountName')]",
"tableEndpoint": "[reference(concat('Microsoft.Storage/storageAccounts/', variables('supportLogStorageAccountName')), variables('storageApiVersion')).primaryEndpoints.table]"
},
"fabricSettings": [],
"managementEndpoint": "[concat('http://',reference(concat(parameters('lbIPName'),'-','0')).dnsSettings.fqdn,':',parameters('nt0fabricHttpGatewayPort'))]",
@ -840,13 +846,13 @@
},
"tags": {
"resourceType": "Service Fabric",
"clusterName": "[parameters('clusterName')]"
"clusterName": "[variables('clusterName')]"
}
}
],
"outputs": {
"clusterProperties": {
"value": "[reference(parameters('clusterName'))]",
"value": "[reference(variables('clusterName'))]",
"type": "object"
}
}

View File

@ -2,8 +2,11 @@
"$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentParameters.json#",
"contentVersion": "1.0.0.0",
"parameters": {
"prefix": {
"value": "qa"
},
"clusterName": {
"value": "qa-eshop-sfwin-cluster"
"value": "-eshop-sfwin-cluster"
},
"clusterLocation": {
"value": "westus"
@ -12,10 +15,10 @@
"value": "westus"
},
"adminUserName": {
"value": "eshop"
"value": "testedu"
},
"adminPassword": {
"value": "Your_complex_Pass@word1"
"value": "testedu1234!"
},
"nicName": {
"value": "NIC-eshopsfwin"
@ -24,7 +27,7 @@
"value": "eshopsfwin-PubIP"
},
"dnsName": {
"value": "qa-eshop-sfwin-cluster"
"value": "testedu-eshop-sfwin-cluster"
},
"virtualNetworkName": {
"value": "VNet-eshopsfwin"
@ -36,10 +39,10 @@
"value": "LBIP-eshopsfwin"
},
"applicationDiagnosticsStorageAccountName": {
"value": "sfdgqaeshopsfwin"
"value": "sfdiageshopw"
},
"supportLogStorageAccountName": {
"value": "sflogsqaeshopsfwin"
"value": "sflogeshopw"
},
"vmImageSku": {
"value": "2016-Datacenter-with-Containers"

View File

@ -24,7 +24,7 @@ Once parameter file is edited you can deploy it using [create-resources script](
i. e. if you are in windows, to deploy a Storage Account in a new resourcegroup located in westus, go to `deploy\az` folder and type:
```
create-resources.cmd catalog\deploystorage newResourceGroup -c westus
create-resources.cmd storage\catalog\deploystorage newResourceGroup -c westus
```

View File

@ -1,4 +1,4 @@
version: '3.4'
version: '3.3'
services:
sql.data:

View File

@ -1,4 +1,4 @@
version: '3.4'
version: '3.3'
services:
sql.data:

View File

@ -1,4 +1,4 @@
version: '3.4'
version: '3.3'
# The Production docker-compose file has to have the external/real IPs or DNS names for the services
# The ESHOP_PROD_EXTERNAL_DNS_NAME_OR_IP environment variable is taken, by default, from the ".env" file defined like:
@ -68,6 +68,17 @@ services:
- AzureServiceBusEnabled=False
ports:
- "5102:80"
ordering.backgroundtasks:
environment:
- ASPNETCORE_ENVIRONMENT=Production
- ASPNETCORE_URLS=http://0.0.0.0:80
- ConnectionString=${ESHOP_AZURE_ORDERING_DB:-Server=sql.data;Database=Microsoft.eShopOnContainers.Services.OrderingDb;User Id=sa;Password=Pass@word}
- EventBusConnection=${ESHOP_AZURE_SERVICE_BUS:-rabbitmq}
- UseCustomizationData=True
- AzureServiceBusEnabled=False
ports:
- "5111:80"
webspa:
environment:

View File

@ -1,4 +1,4 @@
version: '3.4'
version: '3.3'
services:
basket.api:
@ -37,6 +37,15 @@ services:
- sql.data
- rabbitmq
ordering.backgroundtasks:
image: eshop/ordering.backgroundtasks-win:${TAG:-latest}
build:
context: .
dockerfile: src/Services/Ordering/Ordering.BackgroundTasks/Dockerfile
depends_on:
- sql.data
- rabbitmq
marketing.api:
image: eshop/marketing.api-win:${TAG:-latest}
build:

View File

@ -1,4 +1,4 @@
version: '3.4'
version: '3.3'
services:
ci-build:
@ -8,6 +8,7 @@ services:
- ./cli-linux:/cli-linux
working_dir: /src
# Next line is using the .sln file to compile all the projects.
# Sometime there is an issue in msbuild exits the process before finishing building the bits: (https://github.com/Microsoft/msbuild/issues/2153)
# Random error: error MSB4017: The build stopped unexpectedly be cause of an unexpected logger failure.

View File

@ -1,4 +1,4 @@
version: '3.4'
version: '3.3'
services:
basket.api:

View File

@ -1,4 +1,4 @@
version: '3.4'
version: '3.3'
# ONLY NEEDED WHEN RUNNING WINDOWS CONTAINERS
#
@ -37,7 +37,12 @@ services:
- EventBusUserName=admin
- EventBusPassword=password
marketing.api:
ordering.api:
environment:
- EventBusUserName=admin
- EventBusPassword=password
ordering.backgroundtasks:
environment:
- EventBusUserName=admin
- EventBusPassword=password

View File

@ -1,4 +1,4 @@
version: '3.4'
version: '3.3'
# The Production docker-compose file has to have the external/real IPs or DNS names for the services
# The ESHOP_PROD_EXTERNAL_DNS_NAME_OR_IP environment variable is taken, by default, from the ".env" file defined like:
@ -92,6 +92,24 @@ services:
ports:
- "5102:80"
ordering.backgroundtasks:
environment:
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=http://0.0.0.0:80
- ConnectionString=${ESHOP_AZURE_ORDERING_DB:-Server=sql.data;Database=Microsoft.eShopOnContainers.Services.OrderingDb;User Id=sa;Password=Pass@word}
- EventBusConnection=${ESHOP_AZURE_SERVICE_BUS:-rabbitmq}
- EventBusUserName=${ESHOP_SERVICE_BUS_USERNAME}
- EventBusPassword=${ESHOP_SERVICE_BUS_PASSWORD}
- UseCustomizationData=True
- AzureServiceBusEnabled=False
- CheckUpdateTime=30000
- GracePeriodTime=1
- ApplicationInsights__InstrumentationKey=${INSTRUMENTATION_KEY}
- OrchestratorType=${ORCHESTRATOR_TYPE}
- UseLoadTest=${USE_LOADTEST:-False}
ports:
- "5111:80"
marketing.api:
environment:
- ASPNETCORE_ENVIRONMENT=Development

204
eShopOnContainers-MobileApps.sln Executable file → Normal file
View File

@ -16,8 +16,6 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mobile Apps", "Mobile Apps"
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", "{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}"
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}"
@ -30,14 +28,16 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Targets", "Targets", "{9CC7
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", "{6E4285E7-7611-4440-A1B5-3513EBB13807}"
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.iOS", "src\Mobile\eShopOnContainers\eShopOnContainers.TestRunner.iOS\eShopOnContainers.TestRunner.iOS.csproj", "{B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.TestRunner.Windows", "src\Mobile\eShopOnContainers\eShopOnContainers.TestRunner.Windows\eShopOnContainers.TestRunner.Windows.csproj", "{A7337243-33B8-463A-87AD-944B75EFD820}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.UnitTests", "src\Mobile\eShopOnContainers\eShopOnContainers.UnitTests\eShopOnContainers.UnitTests.csproj", "{FDD910BC-DF0F-483D-B7D5-C7D831855172}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.Core", "src\Mobile\eShopOnContainers\eShopOnContainers.Core\eShopOnContainers.Core.csproj", "{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Ad-Hoc|Any CPU = Ad-Hoc|Any CPU
@ -66,54 +66,6 @@ Global
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Ad-Hoc|x64.Build.0 = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Ad-Hoc|x86.Build.0 = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.AppStore|Any CPU.Build.0 = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.AppStore|ARM.ActiveCfg = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.AppStore|ARM.Build.0 = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.AppStore|iPhone.ActiveCfg = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.AppStore|iPhone.Build.0 = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.AppStore|x64.ActiveCfg = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.AppStore|x64.Build.0 = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.AppStore|x86.ActiveCfg = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.AppStore|x86.Build.0 = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Debug|Any CPU.Build.0 = Debug|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Debug|ARM.ActiveCfg = Debug|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Debug|ARM.Build.0 = Debug|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Debug|iPhone.Build.0 = Debug|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Debug|x64.ActiveCfg = Debug|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Debug|x64.Build.0 = Debug|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Debug|x86.ActiveCfg = Debug|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Debug|x86.Build.0 = Debug|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Release|Any CPU.ActiveCfg = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Release|Any CPU.Build.0 = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Release|ARM.ActiveCfg = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Release|ARM.Build.0 = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Release|iPhone.ActiveCfg = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Release|iPhone.Build.0 = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Release|x64.ActiveCfg = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Release|x64.Build.0 = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.Release|x86.ActiveCfg = Release|Any CPU
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}.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
@ -283,54 +235,6 @@ Global
{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
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Ad-Hoc|x64.Build.0 = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Ad-Hoc|x86.Build.0 = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.AppStore|Any CPU.Build.0 = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.AppStore|ARM.ActiveCfg = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.AppStore|ARM.Build.0 = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.AppStore|iPhone.ActiveCfg = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.AppStore|iPhone.Build.0 = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.AppStore|x64.ActiveCfg = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.AppStore|x64.Build.0 = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.AppStore|x86.ActiveCfg = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.AppStore|x86.Build.0 = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Debug|Any CPU.Build.0 = Debug|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Debug|ARM.ActiveCfg = Debug|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Debug|ARM.Build.0 = Debug|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Debug|iPhone.Build.0 = Debug|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Debug|x64.ActiveCfg = Debug|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Debug|x64.Build.0 = Debug|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Debug|x86.ActiveCfg = Debug|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Debug|x86.Build.0 = Debug|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Release|Any CPU.ActiveCfg = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Release|Any CPU.Build.0 = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Release|ARM.ActiveCfg = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Release|ARM.Build.0 = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Release|iPhone.ActiveCfg = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Release|iPhone.Build.0 = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Release|x64.ActiveCfg = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Release|x64.Build.0 = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.Release|x86.ActiveCfg = Release|Any CPU
{6E4285E7-7611-4440-A1B5-3513EBB13807}.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
@ -500,23 +404,119 @@ Global
{A7337243-33B8-463A-87AD-944B75EFD820}.Release|x86.ActiveCfg = Release|x86
{A7337243-33B8-463A-87AD-944B75EFD820}.Release|x86.Build.0 = Release|x86
{A7337243-33B8-463A-87AD-944B75EFD820}.Release|x86.Deploy.0 = Release|x86
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Ad-Hoc|x64.Build.0 = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Ad-Hoc|x86.Build.0 = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.AppStore|Any CPU.Build.0 = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.AppStore|ARM.ActiveCfg = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.AppStore|ARM.Build.0 = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.AppStore|iPhone.ActiveCfg = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.AppStore|iPhone.Build.0 = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.AppStore|x64.ActiveCfg = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.AppStore|x64.Build.0 = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.AppStore|x86.ActiveCfg = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.AppStore|x86.Build.0 = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Debug|ARM.ActiveCfg = Debug|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Debug|ARM.Build.0 = Debug|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Debug|iPhone.Build.0 = Debug|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Debug|x64.ActiveCfg = Debug|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Debug|x64.Build.0 = Debug|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Debug|x86.ActiveCfg = Debug|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Debug|x86.Build.0 = Debug|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Release|Any CPU.Build.0 = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Release|ARM.ActiveCfg = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Release|ARM.Build.0 = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Release|iPhone.ActiveCfg = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Release|iPhone.Build.0 = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Release|x64.ActiveCfg = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Release|x64.Build.0 = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Release|x86.ActiveCfg = Release|Any CPU
{FDD910BC-DF0F-483D-B7D5-C7D831855172}.Release|x86.Build.0 = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Ad-Hoc|x64.Build.0 = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Ad-Hoc|x86.Build.0 = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.AppStore|Any CPU.Build.0 = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.AppStore|ARM.ActiveCfg = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.AppStore|ARM.Build.0 = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.AppStore|iPhone.ActiveCfg = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.AppStore|iPhone.Build.0 = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.AppStore|x64.ActiveCfg = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.AppStore|x64.Build.0 = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.AppStore|x86.ActiveCfg = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.AppStore|x86.Build.0 = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Debug|Any CPU.Build.0 = Debug|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Debug|ARM.ActiveCfg = Debug|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Debug|ARM.Build.0 = Debug|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Debug|iPhone.Build.0 = Debug|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Debug|x64.ActiveCfg = Debug|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Debug|x64.Build.0 = Debug|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Debug|x86.ActiveCfg = Debug|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Debug|x86.Build.0 = Debug|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Release|Any CPU.ActiveCfg = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Release|Any CPU.Build.0 = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Release|ARM.ActiveCfg = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Release|ARM.Build.0 = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Release|iPhone.ActiveCfg = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Release|iPhone.Build.0 = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Release|x64.ActiveCfg = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Release|x64.Build.0 = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Release|x86.ActiveCfg = Release|Any CPU
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{F61357CE-1CC2-410E-8776-B16EEBC98EB8} = {932D8224-11F6-4D07-B109-DA28AD288A63}
{BA96A12C-4EE3-46C4-BB3F-F811B554CD01} = {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}
{6E4285E7-7611-4440-A1B5-3513EBB13807} = {B7B1D395-4E06-4036-BE86-C216756B9367}
{A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1} = {B7B1D395-4E06-4036-BE86-C216756B9367}
{B68C2B56-7581-46AE-B55D-D25DDFD3BFE3} = {B7B1D395-4E06-4036-BE86-C216756B9367}
{A7337243-33B8-463A-87AD-944B75EFD820} = {B7B1D395-4E06-4036-BE86-C216756B9367}
{FDD910BC-DF0F-483D-B7D5-C7D831855172} = {B7B1D395-4E06-4036-BE86-C216756B9367}
{76C5F2A7-6CD5-49EA-9F33-EC44DE6539C7} = {778289CA-31F7-4464-8C2A-612EE846F8A7}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {8A9E878A-C296-4615-97AB-7A4505148872}

View File

@ -1,7 +1,7 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15
VisualStudioVersion = 15.0.27130.2010
VisualStudioVersion = 15.0.27130.2024
MinimumVisualStudioVersion = 10.0.40219.1
Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", "docker-compose.dcproj", "{FEA0C318-FFED-4D39-8781-265718CA43DD}"
EndProject
@ -103,7 +103,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared Code", "Shared Code"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Targets", "Targets", "{2BB81612-8D04-49CD-B17F-38DAB176E583}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.Core", "src\Mobile\eShopOnContainers\eShopOnContainers.Core\eShopOnContainers.Core.csproj", "{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "eShopOnContainers.Core", "src\Mobile\eShopOnContainers\eShopOnContainers.Core\eShopOnContainers.Core.csproj", "{BA96A12C-4EE3-46C4-BB3F-F811B554CD01}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.Droid", "src\Mobile\eShopOnContainers\eShopOnContainers.Droid\eShopOnContainers.Droid.csproj", "{62DBB163-9CA9-4818-B48B-13233DF37C24}"
EndProject
@ -113,7 +113,7 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.Windows",
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Mobile Apps", "Mobile Apps", "{0AAED9FF-3260-43BB-B586-9AAF1E010A90}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.UnitTests", "src\Mobile\eShopOnContainers\eShopOnContainers.UnitTests\eShopOnContainers.UnitTests.csproj", "{6E4285E7-7611-4440-A1B5-3513EBB13807}"
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "eShopOnContainers.UnitTests", "src\Mobile\eShopOnContainers\eShopOnContainers.UnitTests\eShopOnContainers.UnitTests.csproj", "{6E4285E7-7611-4440-A1B5-3513EBB13807}"
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
@ -121,6 +121,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.TestRunne
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.TestRunner.Windows", "src\Mobile\eShopOnContainers\eShopOnContainers.TestRunner.Windows\eShopOnContainers.TestRunner.Windows.csproj", "{A7337243-33B8-463A-87AD-944B75EFD820}"
EndProject
Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Ordering.BackgroundTasks", "src\Services\Ordering\Ordering.BackgroundTasks\Ordering.BackgroundTasks.csproj", "{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Ad-Hoc|Any CPU = Ad-Hoc|Any CPU
@ -1759,6 +1761,54 @@ Global
{A7337243-33B8-463A-87AD-944B75EFD820}.Release|x86.ActiveCfg = Release|x86
{A7337243-33B8-463A-87AD-944B75EFD820}.Release|x86.Build.0 = Release|x86
{A7337243-33B8-463A-87AD-944B75EFD820}.Release|x86.Deploy.0 = Release|x86
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Ad-Hoc|Any CPU.ActiveCfg = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Ad-Hoc|Any CPU.Build.0 = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Ad-Hoc|ARM.ActiveCfg = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Ad-Hoc|ARM.Build.0 = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Ad-Hoc|iPhone.ActiveCfg = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Ad-Hoc|iPhone.Build.0 = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Ad-Hoc|iPhoneSimulator.Build.0 = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Ad-Hoc|x64.ActiveCfg = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Ad-Hoc|x64.Build.0 = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Ad-Hoc|x86.ActiveCfg = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Ad-Hoc|x86.Build.0 = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.AppStore|Any CPU.ActiveCfg = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.AppStore|Any CPU.Build.0 = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.AppStore|ARM.ActiveCfg = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.AppStore|ARM.Build.0 = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.AppStore|iPhone.ActiveCfg = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.AppStore|iPhone.Build.0 = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.AppStore|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.AppStore|iPhoneSimulator.Build.0 = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.AppStore|x64.ActiveCfg = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.AppStore|x64.Build.0 = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.AppStore|x86.ActiveCfg = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.AppStore|x86.Build.0 = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Debug|Any CPU.Build.0 = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Debug|ARM.ActiveCfg = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Debug|ARM.Build.0 = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Debug|iPhone.Build.0 = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Debug|x64.ActiveCfg = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Debug|x64.Build.0 = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Debug|x86.ActiveCfg = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Debug|x86.Build.0 = Debug|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Release|Any CPU.ActiveCfg = Release|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Release|Any CPU.Build.0 = Release|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Release|ARM.ActiveCfg = Release|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Release|ARM.Build.0 = Release|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Release|iPhone.ActiveCfg = Release|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Release|iPhone.Build.0 = Release|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Release|x64.ActiveCfg = Release|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Release|x64.Build.0 = Release|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Release|x86.ActiveCfg = Release|Any CPU
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -1817,6 +1867,7 @@ Global
{A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1} = {0AAED9FF-3260-43BB-B586-9AAF1E010A90}
{B68C2B56-7581-46AE-B55D-D25DDFD3BFE3} = {0AAED9FF-3260-43BB-B586-9AAF1E010A90}
{A7337243-33B8-463A-87AD-944B75EFD820} = {0AAED9FF-3260-43BB-B586-9AAF1E010A90}
{16CDE5D2-2DDE-4AF2-B902-AD9CC42DE480} = {0BD0DB92-2D98-44D9-9AC0-C59186D59B0B}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {25728519-5F0F-4973-8A64-0A81EB4EA8D9}

View File

@ -15,7 +15,7 @@ or using AKS instead of ACS
>```
* An `Azure Blob storage`. It is needed for storing the kubernetes config file used by the hosted agent to access to Kubernetes cluster. Example:
<img src="./img/k8s/blob_creation.png">
<img src="./img/blob_creation.png">
* Upload the `kubernetes config file` to the blob storage previously created. Execute the following command which will download the config file into the directory `c:\Users\<User>\.kube\` and then, upload it to your blob storage:
@ -37,7 +37,7 @@ or using AKS instead of ACS
>```
>https://eshopk8s.blob.core.windows.net/k8s-config/config
>```
<img src="./img/k8s/get_kubectlconfig_task.png">
<img src="./img/get_kubectlconfig_task.png">
3. Create a powershell task to execute the k8s deployment script. For example:
@ -63,4 +63,4 @@ or using AKS instead of ACS
You can use additional parameters (i.e. pass registry and user/password to use custom registry instead of DockerHub. Plase, refer to [README.k8s.md](./README.k8s.md) for more info.
<img src="./img/k8s/deploy_script_task.png">
<img src="./img/deploy_script_task.png">

View File

@ -33,18 +33,18 @@ or using AKS instead of ACS
Once the user and password are retrieved, run the following script for deployment. For example:
>```
>./deploy.ps1 -registry myregistry.azurecr.io -dockerUser User -dockerPassword SecretPassword -configFile file_with_config.json
>./deploy.ps1 -registry myregistry.azurecr.io -dockerUser User -dockerPassword SecretPassword -configFile file_with_config.yaml
>```
The parameter `configFile` is important (and mandatory) because it contains the configuration used for the Pods in Kubernetes. This allow deploying Pods that use your own resources in Azure or any other cloud provider. A configuration file `local.json` is provided which configures Pods to use the infrastructure containers (that is sql server, rabbitmq, redis and mongodb must be deployed also in the k8s).
The parameter `configFile` is important (and mandatory) because it contains the configuration used for the Pods in Kubernetes. This allow deploying Pods that use your own resources in Azure or any other cloud provider. A configuration file `conf_local.yaml` is provided which configures Pods to use the infrastructure containers (that is sql server, rabbitmq, redis and mongodb must be deployed also in the k8s).
The script will build the code and corresponding Docker images, push the later to your registry, and deploy the application to your cluster. You can watch the deployment unfold from the Kubernetes web interface: run `kubectl proxy` and open a browser to [http://localhost:8001/ui](http://localhost:8001/ui)
### Pods configuration file
When deploying to k8s the script needs the `configFile` with the location of a JSON configuration file. This file contains the configuration of the pods. The file is a JSON file. For reference another configuration file (cloud.json) is provided but without valid values.
When deploying to k8s the script needs the `configFile` parameter with the location of the YAML configuration file. This file contains the configuration of the pods. The file is a .YAML file. For reference another configuration file (conf_cloud.yaml) is provided but without valid values.
If you deploy the infrastructure containers use `local.json` as a value for `configFile` parameter. If you don't deploy the infrastructure containers use your own configuration file with the correct values.
If you deploy the infrastructure containers use `conf_local.yaml` as a value for `configFile` parameter. If you don't deploy the infrastructure containers use your own configuration file with the correct values.
### Parameters of the deploy.ps1 script

212
k8s/deploy.sh Executable file
View File

@ -0,0 +1,212 @@
#!/usr/bin/env bash
# http://redsymbol.net/articles/unofficial-bash-strict-mode/
set -euo pipefail
# This script is comparable to the PowerShell script deploy.ps1 but to be used from a Mac bash environment.
# There are, however, the following few differences/limitations:
# It assumes docker/container registry login was already performed
# It assumes K8s was given access to the registry—does not create any K8s secrets
# It does not support explicit kubectl config file (relies on kubectl config use-context to point kubectl at the right cluster/namespace)
# It always deploys infrastructure bits (redis, SQL Server etc)
# The script was tested only with Azure Container Registry (not Docker Hub, although it is expected to work with Docker Hub too)
# Feel free to submit a PR in order to improve it.
usage()
{
cat <<END
deploy.sh: deploys eShopOnContainers application to Kubernetes cluster
Parameters:
-r | --registry <container registry>
Specifies container registry (ACR) to use (required), e.g. myregistry.azurecr.io
-t | --tag <docker image tag>
Default: newly created, date-based timestamp, with 1-minute resolution
-b | --build-solution
Force solution build before deployment (default: false)
--skip-image-build
Do not build images (default is to build all images)
--skip-image-push
Do not upload images to the container registry (just run the Kubernetes deployment portion)
Default is to push images to container registry
-h | --help
Displays this help text and exits the script
It is assumed that the Kubernetes AKS cluster has been granted access to ACR registry.
For more info see
https://docs.microsoft.com/en-us/azure/container-registry/container-registry-auth-aks
WARNING! THE SCRIPT WILL COMPLETELY DESTROY ALL DEPLOYMENTS AND SERVICES VISIBLE
FROM THE CURRENT CONFIGURATION CONTEXT.
It is recommended that you create a separate namespace and confguration context
for the eShopOnContainers application, to isolate it from other applications on the cluster.
For more information see https://kubernetes.io/docs/tasks/administer-cluster/namespaces/
You can use eshop-namespace.yaml file (in the same directory) to create the namespace.
END
}
image_tag=$(date '+%Y%m%d%H%M')
build_solution=''
container_registry=''
build_images='yes'
push_images='yes'
while [[ $# -gt 0 ]]; do
case "$1" in
-r | --registry )
container_registry="$2"; shift 2 ;;
-t | --tag )
image_tag="$2"; shift 2 ;;
-b | --build-solution )
build_solution='yes'; shift ;;
--skip-image-build )
build_images=''; shift ;;
--skip-image-push )
push_images=''; shift ;;
-h | --help )
usage; exit 1 ;;
*)
echo "Unknown option $1"
usage; exit 2 ;;
esac
done
if [[ ! $container_registry ]]; then
echo 'Container registry must be specified (e.g. myregistry.azurecr.io)'
echo ''
usage
exit 3
fi
if [[ $build_solution ]]; then
echo "#################### Building eShopOnContainers solution ####################"
dotnet publish -o obj/Docker/publish ../eShopOnContainers-ServicesAndWebApps.sln
fi
export TAG=$image_tag
if [[ $build_images ]]; then
echo "#################### Building eShopOnContainers Docker images ####################"
docker-compose -p .. -f ../docker-compose.yml build
# Remove temporary images
docker rmi $(docker images -qf "dangling=true")
fi
if [[ $push_images ]]; then
echo "#################### Pushing images to registry ####################"
services=(basket.api catalog.api identity.api ordering.api marketing.api payment.api locations.api webmvc webspa webstatus)
for service in "${services[@]}"
do
echo "Pushing image for service $service..."
docker tag "eshop/$service:$image_tag" "$container_registry/$service:$image_tag"
docker push "$container_registry/$service:$image_tag"
done
fi
echo "#################### Cleaning up old deployment ####################"
kubectl delete deployments --all
kubectl delete services --all
kubectl delete configmap config-files || true
kubectl delete configmap urls || true
kubectl delete configmap externalcfg || true
echo "#################### Deploying infrastructure components ####################"
kubectl create configmap config-files --from-file=nginx-conf=nginx.conf
kubectl label configmap config-files app=eshop
kubectl create -f sql-data.yaml -f basket-data.yaml -f keystore-data.yaml -f rabbitmq.yaml -f nosql-data.yaml
echo "#################### Creating application service definitions ####################"
kubectl create -f services.yaml -f frontend.yaml
echo "#################### Waiting for Azure to provision external IP ####################"
ip_regex='([0-9]{1,3}\.){3}[0-9]{1,3}'
while true; do
printf "."
frontendUrl=$(kubectl get svc frontend -o=jsonpath="{.status.loadBalancer.ingress[0].ip}")
if [[ $frontendUrl =~ $ip_regex ]]; then
break
fi
sleep 5s
done
printf "\n"
externalDns=$frontendUrl
echo "Using $externalDns as the external DNS/IP of the K8s cluster"
echo "#################### Creating application configuration ####################"
# urls configmap
kubectl create configmap urls \
"--from-literal=BasketUrl=http://basket" \
"--from-literal=BasketHealthCheckUrl=http://basket/hc" \
"--from-literal=CatalogUrl=http://$externalDns/catalog-api" \
"--from-literal=CatalogHealthCheckUrl=http://catalog/hc" \
"--from-literal=PicBaseUrl=http://$externalDns/catalog-api/api/v1/catalog/items/[0]/pic/" \
"--from-literal=Marketing_PicBaseUrl=http://$externalDns/marketing-api/api/v1/campaigns/[0]/pic/" \
"--from-literal=IdentityUrl=http://$externalDns/identity" \
"--from-literal=IdentityHealthCheckUrl=http://identity/hc" \
"--from-literal=OrderingUrl=http://ordering" \
"--from-literal=OrderingHealthCheckUrl=http://ordering/hc" \
"--from-literal=MvcClientExternalUrl=http://$externalDns/webmvc" \
"--from-literal=WebMvcHealthCheckUrl=http://webmvc/hc" \
"--from-literal=MvcClientOrderingUrl=http://ordering" \
"--from-literal=MvcClientCatalogUrl=http://catalog" \
"--from-literal=MvcClientBasketUrl=http://basket" \
"--from-literal=MvcClientMarketingUrl=http://marketing" \
"--from-literal=MvcClientLocationsUrl=http://locations" \
"--from-literal=MarketingHealthCheckUrl=http://marketing/hc" \
"--from-literal=WebSpaHealthCheckUrl=http://webspa/hc" \
"--from-literal=SpaClientMarketingExternalUrl=http://$externalDns/marketing-api" \
"--from-literal=SpaClientOrderingExternalUrl=http://$externalDns/ordering-api" \
"--from-literal=SpaClientCatalogExternalUrl=http://$externalDns/catalog-api" \
"--from-literal=SpaClientBasketExternalUrl=http://$externalDns/basket-api" \
"--from-literal=SpaClientIdentityExternalUrl=http://$externalDns/identity" \
"--from-literal=SpaClientLocationsUrl=http://$externalDns/locations-api" \
"--from-literal=LocationsHealthCheckUrl=http://locations/hc" \
"--from-literal=SpaClientExternalUrl=http://$externalDns" \
"--from-literal=LocationApiClient=http://$externalDns/locations-api" \
"--from-literal=MarketingApiClient=http://$externalDns/marketing-api" \
"--from-literal=BasketApiClient=http://$externalDns/basket-api" \
"--from-literal=OrderingApiClient=http://$externalDns/ordering-api" \
"--from-literal=PaymentHealthCheckUrl=http://payment/hc"
kubectl label configmap urls app=eshop
# externalcfg configmap -- points to local infrastructure components (rabbitmq, SQL Server etc)
kubectl create -f conf_local.yml
# Create application pod deployments
kubectl create -f deployments.yaml
echo "#################### Deploying application pods ####################"
# update deployments with the correct image (with tag and/or registry)
kubectl set image deployments/basket "basket=$container_registry/basket.api:$image_tag"
kubectl set image deployments/catalog "catalog=$container_registry/catalog.api:$image_tag"
kubectl set image deployments/identity "identity=$container_registry/identity.api:$image_tag"
kubectl set image deployments/ordering "ordering=$container_registry/ordering.api:$image_tag"
kubectl set image deployments/marketing "marketing=$container_registry/marketing.api:$image_tag"
kubectl set image deployments/locations "locations=$container_registry/locations.api:$image_tag"
kubectl set image deployments/payment "payment=$container_registry/payment.api:$image_tag"
kubectl set image deployments/webmvc "webmvc=$container_registry/webmvc:$image_tag"
kubectl set image deployments/webstatus "webstatus=$container_registry/webstatus:$image_tag"
kubectl set image deployments/webspa "webspa=$container_registry/webspa:$image_tag"
kubectl rollout resume deployments/basket
kubectl rollout resume deployments/catalog
kubectl rollout resume deployments/identity
kubectl rollout resume deployments/ordering
kubectl rollout resume deployments/marketing
kubectl rollout resume deployments/locations
kubectl rollout resume deployments/payment
kubectl rollout resume deployments/webmvc
kubectl rollout resume deployments/webstatus
kubectl rollout resume deployments/webspa
echo "WebSPA is exposed at http://$externalDns, WebMVC at http://$externalDns/webmvc, WebStatus at http://$externalDns/webstatus"
echo "eShopOnContainers deployment is DONE"

5
k8s/eshop-namespace.yaml Normal file
View File

@ -0,0 +1,5 @@
apiVersion: v1
kind: Namespace
metadata:
name: eshop

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

@ -56,6 +56,20 @@ spec:
---
apiVersion: v1
kind: Service
metadata:
labels:
app: eshop
component: orderingbackground
name: orderingbackground
spec:
ports:
- port: 80
selector:
app: eshop
component: orderingbackground
---
apiVersion: v1
kind: Service
metadata:
labels:
app: eshop

View File

@ -2,10 +2,6 @@
In the root folder of the repo are all docker-compose files (`docker-compose*.yml`). Here is a list of all of them and what is their purpose:
## Container build
* `docker-compose.ci.build.yml`: This file is for starting the build container to build the project using a container that has all needed prerequisites. Refer to [corresponding wiki section](https://github.com/dotnet-architecture/eShopOnContainers/wiki/03.-Setting-the-eShopOnContainers-solution-up-in-a-Windows-CLI-environment-(dotnet-CLI,-Docker-CLI-and-VS-Code)#build-the-bits-through-the-build-container-image) for more information.
## Files needed to run eShopOnContainers locally
* `docker-compose.yml`: This file contains **the definition of all images needed for running eShopOnContainers**.
@ -47,6 +43,17 @@ PicBaseUrl=${ESHOP_AZURE_STORAGE_CATALOG:-http://${ESHOP_PROD_EXTERNAL_DNS_NAME_
So, use `ESHOP_AZURE_STORAGE_CATALOG` if set, and if not use `http://${ESHOP_PROD_EXTERNAL_DNS_NAME_OR_IP}:5101/api/v1/catalog/items/[0]/pic/}`. Unfortunately seems that docker-compose do not substitute variables inside variables, so the value that `PicBaseUrl` gets if `ESHOP_AZURE_STORAGE_CATALOG` is not set is literally `http://${ESHOP_PROD_EXTERNAL_DNS_NAME_OR_IP}:5101/api/v1/catalog/items/[0]/pic/}` without any substitution.
## Build container (DEPRECATED)
NOTE that since we support Docker MULTI-STAGE builds (support in VS 2017 since December 2017), the build container is no loger needed in CI/CD pipelines as a similar process is done by Docker itself under the covers with the multi-stage builds.
For more info on Docker Multi-Stage, read:
https://docs.docker.com/develop/develop-images/multistage-build/
https://blogs.msdn.microsoft.com/stevelasker/2017/09/11/net-and-multistage-dockerfiles/
* `docker-compose.ci.build.yml`: This file is for starting the build container to build the project using a container that has all needed prerequisites. Refer to [corresponding wiki section](https://github.com/dotnet-architecture/eShopOnContainers/wiki/03.-Setting-the-eShopOnContainers-solution-up-in-a-Windows-CLI-environment-(dotnet-CLI,-Docker-CLI-and-VS-Code)#build-the-bits-through-the-build-container-image) for more information.
**For more information** about docker-compose variable substitution read the [compose docs](https://docs.docker.com/compose/compose-file/#variable-substitution).
## Other files
@ -76,4 +83,4 @@ These files were intended to provide a fast way to start only "infrastructure" c
* `docker-compose-external.override.yml`
* `docker-compose-external.yml`
If you want to start only certain containers use `docker-compose -f ... -f ... up container1 contaner2 containerN` as specified in [compose doc](https://docs.docker.com/compose/reference/up/)
If you want to start only certain containers use `docker-compose -f ... -f ... up container1 contaner2 containerN` as specified in [compose doc](https://docs.docker.com/compose/reference/up/)

View File

@ -92,9 +92,13 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ
policy.Execute(() =>
{
var properties = channel.CreateBasicProperties();
properties.DeliveryMode = 2; // persistent
channel.BasicPublish(exchange: BROKER_NAME,
routingKey: eventName,
basicProperties: null,
mandatory:true,
basicProperties: properties,
body: body);
});
}
@ -184,6 +188,8 @@ namespace Microsoft.eShopOnContainers.BuildingBlocks.EventBusRabbitMQ
var message = Encoding.UTF8.GetString(ea.Body);
await ProcessEvent(eventName, message);
channel.BasicAck(ea.DeliveryTag,multiple:false);
};
channel.BasicConsume(queue: _queueName,

View File

@ -46,8 +46,8 @@
var message = new Message
{
MessageId = new Guid().ToString(),
Body = Encoding.UTF8.GetBytes(jsonMessage),
MessageId = Guid.NewGuid().ToString(),
Body = body,
Label = eventName,
};

View File

@ -20,7 +20,7 @@
<PackageReference Include="System.Threading.Tasks.Parallel" Version="4.3.0" />
<PackageReference Include="System.Threading.Thread" Version="4.3.0" />
<PackageReference Include="System.Threading.Tasks.Extensions" Version="4.4.0" />
<PackageReference Include="WindowsAzure.Storage" Version="8.6.0" />
<PackageReference Include="WindowsAzure.Storage" Version="8.7.0" />
</ItemGroup>
</Project>

View File

@ -1,564 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.Droid", "eShopOnContainers\eShopOnContainers.Droid\eShopOnContainers.Droid.csproj", "{62DBB163-9CA9-4818-B48B-13233DF37C24}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.iOS", "eShopOnContainers\eShopOnContainers.iOS\eShopOnContainers.iOS.csproj", "{6EEB23DC-7063-4444-9AF8-90DF24F549C0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.Core", "eShopOnContainers\eShopOnContainers.Core\eShopOnContainers.Core.csproj", "{65116D1C-145B-4693-ABDA-F0FB6F425191}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.Windows", "eShopOnContainers\eShopOnContainers.Windows\eShopOnContainers.Windows.csproj", "{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared Code", "Shared Code", "{65D002E7-E869-491C-ABA8-9650CEAF677A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Targets", "Targets", "{8F848898-6B21-4905-AE2E-B3ABDEDA1963}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{71D6317D-AF0F-46FE-91DA-B0556911FC4B}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.UnitTests", "eShopOnContainers\eShopOnContainers.UnitTests\eShopOnContainers.UnitTests.csproj", "{F7B6A162-BC4D-4924-B16A-713F9B0344E7}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.TestRunner.Droid", "eShopOnContainers\eShopOnContainers.TestRunner.Droid\eShopOnContainers.TestRunner.Droid.csproj", "{A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.TestRunner.iOS", "eShopOnContainers\eShopOnContainers.TestRunner.iOS\eShopOnContainers.TestRunner.iOS.csproj", "{B68C2B56-7581-46AE-B55D-D25DDFD3BFE3}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.TestRunner.Windows", "eShopOnContainers\eShopOnContainers.TestRunner.Windows\eShopOnContainers.TestRunner.Windows.csproj", "{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.UITests", "eShopOnContainers\eShopOnContainers.UITests\eShopOnContainers.UITests.csproj", "{E3B18084-842C-4B80-8E4A-A7E588EC3137}"
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
{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|Any CPU.Build.0 = 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|Any CPU.Build.0 = 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
{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
{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|Any CPU.Build.0 = Debug|x86
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|Any CPU.Deploy.0 = 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|iPhoneSimulator.Build.0 = Debug|x86
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhoneSimulator.Deploy.0 = 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|Any CPU.Build.0 = Release|x86
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Release|Any CPU.Deploy.0 = 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
{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|Any CPU.Build.0 = 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|Any CPU.Build.0 = 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
{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|Any CPU.Build.0 = Debug|x86
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|Any CPU.Deploy.0 = 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|iPhoneSimulator.Build.0 = Debug|x86
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F}.Debug|iPhoneSimulator.Deploy.0 = 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|Any CPU.Build.0 = 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
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Ad-Hoc|Any CPU.ActiveCfg = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Ad-Hoc|Any CPU.Build.0 = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Ad-Hoc|ARM.ActiveCfg = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Ad-Hoc|ARM.Build.0 = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Ad-Hoc|iPhone.ActiveCfg = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Ad-Hoc|iPhone.Build.0 = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Ad-Hoc|iPhoneSimulator.ActiveCfg = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Ad-Hoc|iPhoneSimulator.Build.0 = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Ad-Hoc|x64.ActiveCfg = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Ad-Hoc|x64.Build.0 = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Ad-Hoc|x86.ActiveCfg = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Ad-Hoc|x86.Build.0 = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.AppStore|Any CPU.ActiveCfg = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.AppStore|Any CPU.Build.0 = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.AppStore|ARM.ActiveCfg = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.AppStore|ARM.Build.0 = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.AppStore|iPhone.ActiveCfg = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.AppStore|iPhone.Build.0 = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.AppStore|iPhoneSimulator.ActiveCfg = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.AppStore|iPhoneSimulator.Build.0 = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.AppStore|x64.ActiveCfg = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.AppStore|x64.Build.0 = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.AppStore|x86.ActiveCfg = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.AppStore|x86.Build.0 = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Debug|Any CPU.Build.0 = Debug|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Debug|ARM.ActiveCfg = Debug|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Debug|ARM.Build.0 = Debug|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Debug|iPhone.ActiveCfg = Debug|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Debug|iPhone.Build.0 = Debug|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Debug|iPhoneSimulator.ActiveCfg = Debug|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Debug|iPhoneSimulator.Build.0 = Debug|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Debug|x64.ActiveCfg = Debug|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Debug|x64.Build.0 = Debug|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Debug|x86.ActiveCfg = Debug|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Debug|x86.Build.0 = Debug|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Release|Any CPU.ActiveCfg = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Release|Any CPU.Build.0 = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Release|ARM.ActiveCfg = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Release|ARM.Build.0 = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Release|iPhone.ActiveCfg = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Release|iPhone.Build.0 = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Release|iPhoneSimulator.ActiveCfg = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Release|iPhoneSimulator.Build.0 = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Release|x64.ActiveCfg = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Release|x64.Build.0 = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Release|x86.ActiveCfg = Release|Any CPU
{E3B18084-842C-4B80-8E4A-A7E588EC3137}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{62DBB163-9CA9-4818-B48B-13233DF37C24} = {8F848898-6B21-4905-AE2E-B3ABDEDA1963}
{6EEB23DC-7063-4444-9AF8-90DF24F549C0} = {8F848898-6B21-4905-AE2E-B3ABDEDA1963}
{65116D1C-145B-4693-ABDA-F0FB6F425191} = {65D002E7-E869-491C-ABA8-9650CEAF677A}
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B} = {8F848898-6B21-4905-AE2E-B3ABDEDA1963}
{F7B6A162-BC4D-4924-B16A-713F9B0344E7} = {71D6317D-AF0F-46FE-91DA-B0556911FC4B}
{A289A7F0-ACD8-42AE-87B6-AB1AFD310BF1} = {71D6317D-AF0F-46FE-91DA-B0556911FC4B}
{B68C2B56-7581-46AE-B55D-D25DDFD3BFE3} = {71D6317D-AF0F-46FE-91DA-B0556911FC4B}
{02680C26-CA1D-4D9D-A7E3-D66AF5BE6F2F} = {71D6317D-AF0F-46FE-91DA-B0556911FC4B}
{E3B18084-842C-4B80-8E4A-A7E588EC3137} = {71D6317D-AF0F-46FE-91DA-B0556911FC4B}
EndGlobalSection
EndGlobal

View File

@ -1,275 +0,0 @@

Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 14
VisualStudioVersion = 14.0.25420.1
MinimumVisualStudioVersion = 10.0.40219.1
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.Droid", "eShopOnContainers\eShopOnContainers.Droid\eShopOnContainers.Droid.csproj", "{62DBB163-9CA9-4818-B48B-13233DF37C24}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.iOS", "eShopOnContainers\eShopOnContainers.iOS\eShopOnContainers.iOS.csproj", "{6EEB23DC-7063-4444-9AF8-90DF24F549C0}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.Core", "eShopOnContainers\eShopOnContainers.Core\eShopOnContainers.Core.csproj", "{65116D1C-145B-4693-ABDA-F0FB6F425191}"
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "eShopOnContainers.Windows", "eShopOnContainers\eShopOnContainers.Windows\eShopOnContainers.Windows.csproj", "{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Shared Code", "Shared Code", "{65D002E7-E869-491C-ABA8-9650CEAF677A}"
EndProject
Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Targets", "Targets", "{8F848898-6B21-4905-AE2E-B3ABDEDA1963}"
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
{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|Any CPU.Build.0 = 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
{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
{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|Any CPU.Build.0 = Debug|x86
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|Any CPU.Deploy.0 = 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|iPhoneSimulator.Build.0 = Debug|x86
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B}.Debug|iPhoneSimulator.Deploy.0 = 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
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
EndGlobalSection
GlobalSection(NestedProjects) = preSolution
{62DBB163-9CA9-4818-B48B-13233DF37C24} = {8F848898-6B21-4905-AE2E-B3ABDEDA1963}
{6EEB23DC-7063-4444-9AF8-90DF24F549C0} = {8F848898-6B21-4905-AE2E-B3ABDEDA1963}
{65116D1C-145B-4693-ABDA-F0FB6F425191} = {65D002E7-E869-491C-ABA8-9650CEAF677A}
{C3C1E2CF-B1F7-4654-BBDC-50143DB22E0B} = {8F848898-6B21-4905-AE2E-B3ABDEDA1963}
EndGlobalSection
EndGlobal

View File

@ -180,13 +180,13 @@
<!-- EXPLICIT STYLES -->
<Style x:Key="ValidationErrorLabelStyle"
TargetType="{x:Type Label}">
<Setter Property="TextColor"
Value="{StaticResource ErrorColor}" />
<Setter Property="FontSize"
Value="{StaticResource LittleSize}" />
</Style>
TargetType="{x:Type Label}">
<Setter Property="TextColor"
Value="{StaticResource ErrorColor}" />
<Setter Property="FontSize"
Value="{StaticResource LittleSize}" />
</Style>
<Style x:Key="EntryStyle"
TargetType="{x:Type Entry}">
<Setter Property="FontFamily"
@ -201,7 +201,7 @@
Value="FillAndExpand" />
<Setter Property="FontAttributes"
Value="Bold" />
<Setter Property="BackgroundColor"
<Setter Property="BackgroundColor"
Value="Transparent" />
<Setter Property="Opacity"
Value="0.6" />

View File

@ -1,12 +1,13 @@
using System;
using System.Globalization;
using eShopOnContainers.Core.Helpers;
using eShopOnContainers.Services;
using eShopOnContainers.Core.ViewModels.Base;
using System.Threading.Tasks;
using eShopOnContainers.Core.Models.Location;
using eShopOnContainers.Core.Models.Location;
using eShopOnContainers.Core.Services.Dependency;
using eShopOnContainers.Core.Services.Location;
using Plugin.Geolocator;
using eShopOnContainers.Core.Services.Settings;
using eShopOnContainers.Core.ViewModels.Base;
using eShopOnContainers.Services;
using System;
using System.Diagnostics;
using System.Globalization;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Xaml;
@ -15,15 +16,14 @@ namespace eShopOnContainers
{
public partial class App : Application
{
public bool UseMockServices { get; set; }
ISettingsService _settingsService;
public App()
{
InitializeComponent();
InitApp();
if (Device.RuntimePlatform == Device.UWP)
if (Device.RuntimePlatform == Device.UWP)
{
InitNavigation();
}
@ -31,8 +31,9 @@ namespace eShopOnContainers
private void InitApp()
{
UseMockServices = Settings.UseMocks;
ViewModelLocator.RegisterDependencies(UseMockServices);
_settingsService = ViewModelLocator.Resolve<ISettingsService>();
if (!_settingsService.UseMocks)
ViewModelLocator.UpdateDependencies(_settingsService.UseMocks);
}
private Task InitNavigation()
@ -41,22 +42,19 @@ namespace eShopOnContainers
return navigationService.InitializeAsync();
}
protected override async void OnStart()
{
base.OnStart();
if (Device.RuntimePlatform != Device.UWP)
if (Device.RuntimePlatform != Device.UWP)
{
await InitNavigation();
}
if (Settings.AllowGpsLocation && !Settings.UseFakeLocation)
if (_settingsService.AllowGpsLocation && !_settingsService.UseFakeLocation)
{
await GetGpsLocation();
}
if (!Settings.UseMocks && !string.IsNullOrEmpty(Settings.AuthAccessToken))
if (!_settingsService.UseMocks && !string.IsNullOrEmpty(_settingsService.AuthAccessToken))
{
await SendCurrentLocation();
}
@ -71,21 +69,27 @@ namespace eShopOnContainers
private async Task GetGpsLocation()
{
var locator = CrossGeolocator.Current;
var dependencyService = ViewModelLocator.Resolve<IDependencyService>();
var locator = dependencyService.Get<ILocationServiceImplementation>();
if (locator.IsGeolocationEnabled && locator.IsGeolocationAvailable)
{
locator.AllowsBackgroundUpdates = true;
{
locator.DesiredAccuracy = 50;
var position = await locator.GetPositionAsync();
Settings.Latitude = position.Latitude.ToString();
Settings.Longitude = position.Longitude.ToString();
try
{
var position = await locator.GetPositionAsync();
_settingsService.Latitude = position.Latitude.ToString();
_settingsService.Longitude = position.Longitude.ToString();
}
catch (Exception ex)
{
Debug.WriteLine(ex);
}
}
else
{
Settings.AllowGpsLocation = false;
_settingsService.AllowGpsLocation = false;
}
}
@ -93,13 +97,12 @@ namespace eShopOnContainers
{
var location = new Location
{
Latitude = double.Parse(Settings.Latitude, CultureInfo.InvariantCulture),
Longitude = double.Parse(Settings.Longitude, CultureInfo.InvariantCulture)
Latitude = double.Parse(_settingsService.Latitude, CultureInfo.InvariantCulture),
Longitude = double.Parse(_settingsService.Longitude, CultureInfo.InvariantCulture)
};
var locationService = ViewModelLocator.Resolve<ILocationService>();
await locationService.UpdateUserLocation(location,
Settings.AuthAccessToken);
await locationService.UpdateUserLocation(location, _settingsService.AuthAccessToken);
}
}
}

View File

@ -1,6 +1,6 @@
using System.Linq;
using eShopOnContainers.Core.Effects;
using System.Linq;
using Xamarin.Forms;
using eShopOnContainers.Core.Effects;
namespace eShopOnContainers.Core.Behaviors
{

View File

@ -1,8 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Threading.Tasks;
using System.Windows.Input;
using Xamarin.Forms;

View File

@ -4,7 +4,7 @@
{
public const string AzureTag = "Azure";
public const string MockTag = "Mock";
public const string DefaultEndpoint = "http://13.88.8.119";
public const string DefaultEndpoint = "http://YOUR_IP_OR_DNS_NAME"; // i.e.: "http://YOUR_IP" or "http://YOUR_DNS_NAME"
private string _baseEndpoint;
private static readonly GlobalSetting _instance = new GlobalSetting();
@ -38,18 +38,8 @@
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 LocationEndpoint { get; set; }
public string MarketingEndpoint { get; set; }
public string UserInfoEndpoint { get; set; }
public string TokenEndpoint { get; set; }
@ -62,18 +52,17 @@
private void UpdateEndpoint(string baseEndpoint)
{
RegisterWebsite = $"{baseEndpoint}:5105/Account/Register";
CatalogEndpoint = $"{baseEndpoint}:5101";
OrdersEndpoint = $"{baseEndpoint}:5102";
BasketEndpoint = $"{baseEndpoint}:5103";
IdentityEndpoint = $"{baseEndpoint}:5105/connect/authorize";
UserInfoEndpoint = $"{baseEndpoint}:5105/connect/userinfo";
TokenEndpoint = $"{baseEndpoint}:5105/connect/token";
LogoutEndpoint = $"{baseEndpoint}:5105/connect/endsession";
IdentityCallback = $"{baseEndpoint}:5105/xamarincallback";
LogoutCallback = $"{baseEndpoint}:5105/Account/Redirecting";
LocationEndpoint = $"{baseEndpoint}:5109";
MarketingEndpoint = $"{baseEndpoint}:5110";
var identityBaseEndpoint = $"{baseEndpoint}/identity";
RegisterWebsite = $"{identityBaseEndpoint}/Account/Register";
LogoutCallback = $"{identityBaseEndpoint}/Account/Redirecting";
var connectBaseEndpoint = $"{identityBaseEndpoint}/connect";
IdentityEndpoint = $"{connectBaseEndpoint}/authorize";
UserInfoEndpoint = $"{connectBaseEndpoint}/userinfo";
TokenEndpoint = $"{connectBaseEndpoint}/token";
LogoutEndpoint = $"{connectBaseEndpoint}/endsession";
IdentityCallback = $"{baseEndpoint}/xamarincallback";
}
}
}

View File

@ -1,90 +0,0 @@
using Plugin.Settings;
using Plugin.Settings.Abstractions;
namespace eShopOnContainers.Core.Helpers
{
/// <summary>
/// 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.
/// </summary>
public static class Settings
{
private static ISettings AppSettings
{
get
{
return CrossSettings.Current;
}
}
#region Setting Constants
private const string AccessToken = "access_token";
private const string IdToken = "id_token";
private const string IdUseMocks = "use_mocks";
private const string IdUrlBase = "url_base";
private const string IdUseFakeLocation = "use_fake_location";
private const string IdLatitude = "latitude";
private const string IdLongitude = "longitude";
private const string IdAllowGpsLocation = "allow_gps_location";
private static readonly string AccessTokenDefault = string.Empty;
private static readonly string IdTokenDefault = string.Empty;
private static readonly bool UseMocksDefault = true;
private static readonly bool UseFakeLocationDefault = false;
private static readonly bool AllowGpsLocationDefault = false;
private static readonly double FakeLatitudeDefault = 47.604610d;
private static readonly double FakeLongitudeDefault = -122.315752d;
private static readonly string UrlBaseDefault = GlobalSetting.Instance.BaseEndpoint;
#endregion
public static string AuthAccessToken
{
get => AppSettings.GetValueOrDefault<string>(AccessToken, AccessTokenDefault);
set => AppSettings.AddOrUpdateValue<string>(AccessToken, value);
}
public static string AuthIdToken
{
get => AppSettings.GetValueOrDefault<string>(IdToken, IdTokenDefault);
set => AppSettings.AddOrUpdateValue<string>(IdToken, value);
}
public static bool UseMocks
{
get => AppSettings.GetValueOrDefault<bool>(IdUseMocks, UseMocksDefault);
set => AppSettings.AddOrUpdateValue<bool>(IdUseMocks, value);
}
public static string UrlBase
{
get => AppSettings.GetValueOrDefault<string>(IdUrlBase, UrlBaseDefault);
set => AppSettings.AddOrUpdateValue<string>(IdUrlBase, value);
}
public static bool UseFakeLocation
{
get => AppSettings.GetValueOrDefault<bool>(IdUseFakeLocation, UseFakeLocationDefault);
set => AppSettings.AddOrUpdateValue<bool>(IdUseFakeLocation, value);
}
public static string Latitude
{
get => AppSettings.GetValueOrDefault<string>(IdLatitude, FakeLatitudeDefault.ToString());
set => AppSettings.AddOrUpdateValue<string>(IdLatitude, value);
}
public static string Longitude
{
get => AppSettings.GetValueOrDefault<string>(IdLongitude, FakeLongitudeDefault.ToString());
set => AppSettings.AddOrUpdateValue<string>(IdLongitude, value);
}
public static bool AllowGpsLocation
{
get => AppSettings.GetValueOrDefault<bool>(IdAllowGpsLocation, AllowGpsLocationDefault);
set => AppSettings.AddOrUpdateValue<bool>(IdAllowGpsLocation, value);
}
}
}

View File

@ -0,0 +1,8 @@
namespace eShopOnContainers.Core.Models.Location
{
public enum GeolocationError
{
PositionUnavailable,
Unauthorized
}
}

View File

@ -0,0 +1,27 @@
using System;
namespace eShopOnContainers.Core.Models.Location
{
public class GeolocationException : Exception
{
public GeolocationError Error { get; private set; }
public GeolocationException(GeolocationError error)
: base("A geolocation error occured: " + error)
{
if (!Enum.IsDefined(typeof(GeolocationError), error))
throw new ArgumentException("error is not a valid GelocationError member", "error");
Error = error;
}
public GeolocationException(GeolocationError error, Exception innerException)
: base("A geolocation error occured: " + error, innerException)
{
if (!Enum.IsDefined(typeof(GeolocationError), error))
throw new ArgumentException("error is not a valid GelocationError member", "error");
Error = error;
}
}
}

View File

@ -0,0 +1,43 @@
using System;
namespace eShopOnContainers.Core.Models.Location
{
public class Position
{
public DateTimeOffset Timestamp { get; set; }
public double Latitude { get; set; }
public double Longitude { get; set; }
public double Altitude { get; set; }
public double Accuracy { get; set; }
public double AltitudeAccuracy { get; set; }
public double Heading { get; set; }
public double Speed { get; set; }
public Position()
{
}
public Position(double latitude, double longitude)
{
Timestamp = DateTimeOffset.UtcNow;
Latitude = latitude;
Longitude = longitude;
}
public Position(Position position)
{
if (position == null)
throw new ArgumentNullException("position");
Timestamp = position.Timestamp;
Latitude = position.Latitude;
Longitude = position.Longitude;
Altitude = position.Altitude;
AltitudeAccuracy = position.AltitudeAccuracy;
Accuracy = position.Accuracy;
Heading = position.Heading;
Speed = position.Speed;
}
}
}

View File

@ -1,7 +1,7 @@
namespace eShopOnContainers.Core.Models.Marketing
{
using System;
using System;
namespace eShopOnContainers.Core.Models.Marketing
{
public class Campaign
{
public int Id { get; set; }

View File

@ -1,7 +1,7 @@
namespace eShopOnContainers.Core.Models.Marketing
{
using System;
using System;
namespace eShopOnContainers.Core.Models.Marketing
{
public class CampaignItem
{
public int Id { get; set; }

View File

@ -1,7 +1,7 @@
namespace eShopOnContainers.Core.Models.Marketing
{
using System.Collections.Generic;
using System.Collections.Generic;
namespace eShopOnContainers.Core.Models.Marketing
{
public class CampaignRoot
{
public int PageIndex { get; set; }

View File

@ -1,6 +1,6 @@
using System;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using Newtonsoft.Json;
namespace eShopOnContainers.Core.Models.Orders
{

View File

@ -0,0 +1,10 @@
namespace eShopOnContainers.Core.Models.Permissions
{
public enum Permission
{
Unknown,
Location,
LocationAlways,
LocationWhenInUse
}
}

View File

@ -0,0 +1,11 @@
namespace eShopOnContainers.Core.Models.Permissions
{
public enum PermissionStatus
{
Denied,
Disabled,
Granted,
Restricted,
Unknown
}
}

View File

@ -1,30 +0,0 @@
using System.Resources;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("eShopOnContainers.Core")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("eShopOnContainers.Core")]
[assembly: AssemblyCopyright("Copyright © 2014")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: NeutralResourcesLanguage("en")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@ -13,16 +13,16 @@ namespace eShopOnContainers.Core.Services.Basket
BuyerId = "9245fe4a-d402-451c-b9ed-9c1a04247482",
Items = new List<BasketItem>
{
new BasketItem { Id = "1", PictureUrl = Device.RuntimePlatform != Device.UWP ? "fake_product_01.png" : "Assets/fake_product_01.png", ProductId = Common.Common.MockCatalogItemId01, ProductName = ".NET Bot Blue Sweatshirt (M)", Quantity = 1, UnitPrice = 19.50M },
new BasketItem { Id = "2", PictureUrl = Device.RuntimePlatform != Device.UWP ? "fake_product_04.png" : "Assets/fake_product_04.png", ProductId = Common.Common.MockCatalogItemId04, ProductName = ".NET Black Cupt", Quantity = 1, UnitPrice = 17.00M }
new BasketItem { Id = "1", PictureUrl = Device.RuntimePlatform != Device.UWP ? "fake_product_01.png" : "Assets/fake_product_01.png", ProductId = Common.Common.MockCatalogItemId01, ProductName = ".NET Bot Blue Sweatshirt (M)", Quantity = 1, UnitPrice = 19.50M },
new BasketItem { Id = "2", PictureUrl = Device.RuntimePlatform != Device.UWP ? "fake_product_04.png" : "Assets/fake_product_04.png", ProductId = Common.Common.MockCatalogItemId04, ProductName = ".NET Black Cupt", Quantity = 1, UnitPrice = 17.00M }
}
};
public async Task<CustomerBasket> GetBasketAsync(string guidUser, string token)
{
await Task.Delay(500);
await Task.Delay(10);
if(string.IsNullOrEmpty(guidUser) || string.IsNullOrEmpty(token))
if (string.IsNullOrEmpty(guidUser) || string.IsNullOrEmpty(token))
{
return new CustomerBasket();
}
@ -32,7 +32,7 @@ namespace eShopOnContainers.Core.Services.Basket
public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket, string token)
{
await Task.Delay(500);
await Task.Delay(10);
if (string.IsNullOrEmpty(token))
{
@ -46,7 +46,7 @@ namespace eShopOnContainers.Core.Services.Basket
public async Task ClearBasketAsync(string guidUser, string token)
{
await Task.Delay(500);
await Task.Delay(10);
if (string.IsNullOrEmpty(token))
{

View File

@ -2,72 +2,78 @@
using System.Threading.Tasks;
using eShopOnContainers.Core.Services.RequestProvider;
using eShopOnContainers.Core.Models.Basket;
using eShopOnContainers.Core.Helpers;
using eShopOnContainers.Core.Services.FixUri;
namespace eShopOnContainers.Core.Services.Basket
{
public class BasketService : IBasketService
{
private readonly IRequestProvider _requestProvider;
private const string ApiUrlBase = "api/v1/basket";
private readonly IFixUriService _fixUriService;
public BasketService(IRequestProvider requestProvider)
private const string ApiUrlBase = "mobileshoppingapigw/api/v1/b/basket";
public BasketService(IRequestProvider requestProvider, IFixUriService fixUriService)
{
_requestProvider = requestProvider;
_fixUriService = fixUriService;
}
public async Task<CustomerBasket> GetBasketAsync(string guidUser, string token)
{
var builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint)
var builder = new UriBuilder(GlobalSetting.Instance.BaseEndpoint)
{
Path = $"{ApiUrlBase}/{guidUser}"
};
var uri = builder.ToString();
CustomerBasket basket =
await _requestProvider.GetAsync<CustomerBasket>(uri, token);
CustomerBasket basket;
ServicesHelper.FixBasketItemPictureUri(basket?.Items);
try
{
basket = await _requestProvider.GetAsync<CustomerBasket>(uri, token);
}
catch (HttpRequestExceptionEx exception) when (exception.HttpCode == System.Net.HttpStatusCode.NotFound)
{
basket = null;
}
_fixUriService.FixBasketItemPictureUri(basket?.Items);
return basket;
}
public async Task<CustomerBasket> UpdateBasketAsync(CustomerBasket customerBasket, string token)
{
var builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint)
var builder = new UriBuilder(GlobalSetting.Instance.BaseEndpoint)
{
Path = ApiUrlBase
};
var uri = builder.ToString();
var result = await _requestProvider.PostAsync(uri, customerBasket, token);
return result;
}
public async Task CheckoutAsync(BasketCheckout basketCheckout, string token)
{
var builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint)
var builder = new UriBuilder(GlobalSetting.Instance.BaseEndpoint)
{
Path = $"{ApiUrlBase}/checkout"
};
var uri = builder.ToString();
await _requestProvider.PostAsync(uri, basketCheckout, token);
}
public async Task ClearBasketAsync(string guidUser, string token)
{
var builder = new UriBuilder(GlobalSetting.Instance.BasketEndpoint)
var builder = new UriBuilder(GlobalSetting.Instance.BaseEndpoint)
{
Path = $"{ApiUrlBase}/{guidUser}"
};
var uri = builder.ToString();
await _requestProvider.DeleteAsync(uri, token);
}
}

View File

@ -24,40 +24,40 @@ namespace eShopOnContainers.Core.Services.Catalog
private ObservableCollection<CatalogItem> MockCatalog = new ObservableCollection<CatalogItem>
{
new CatalogItem { Id = Common.Common.MockCatalogItemId01, PictureUri = Device.RuntimePlatform != Device.UWP ? "fake_product_01.png" : "Assets/fake_product_01.png", Name = ".NET Bot Blue Sweatshirt (M)", Price = 19.50M, CatalogBrandId = 2, CatalogBrand = "Visual Studio", CatalogTypeId = 2, CatalogType = "T-Shirt" },
new CatalogItem { Id = Common.Common.MockCatalogItemId02, PictureUri = Device.RuntimePlatform != Device.UWP ? "fake_product_02.png" : "Assets/fake_product_02.png", Name = ".NET Bot Purple Sweatshirt (M)", Price = 19.50M, CatalogBrandId = 2, CatalogBrand = "Visual Studio", CatalogTypeId = 2, CatalogType = "T-Shirt" },
new CatalogItem { Id = Common.Common.MockCatalogItemId03, PictureUri = Device.RuntimePlatform != Device.UWP ? "fake_product_03.png" : "Assets/fake_product_03.png", Name = ".NET Bot Black Sweatshirt (M)", Price = 19.95M, CatalogBrandId = 2, CatalogBrand = "Visual Studio", CatalogTypeId = 2, CatalogType = "T-Shirt" },
new CatalogItem { Id = Common.Common.MockCatalogItemId04, PictureUri = Device.RuntimePlatform != Device.UWP ? "fake_product_04.png" : "Assets/fake_product_04.png", Name = ".NET Black Cupt", Price = 17.00M, CatalogBrandId = 2, CatalogBrand = "Visual Studio", CatalogTypeId = 1, CatalogType = "Mug" },
new CatalogItem { Id = Common.Common.MockCatalogItemId05, PictureUri = Device.RuntimePlatform != Device.UWP ? "fake_product_05.png" : "Assets/fake_product_05.png", Name = "Azure Black Sweatshirt (M)", Price = 19.50M, CatalogBrandId = 1, CatalogBrand = "Azure", CatalogTypeId = 2, CatalogType = "T-Shirt" }
new CatalogItem { Id = Common.Common.MockCatalogItemId01, PictureUri = Device.RuntimePlatform != Device.UWP ? "fake_product_01.png" : "Assets/fake_product_01.png", Name = ".NET Bot Blue Sweatshirt (M)", Price = 19.50M, CatalogBrandId = 2, CatalogBrand = "Visual Studio", CatalogTypeId = 2, CatalogType = "T-Shirt" },
new CatalogItem { Id = Common.Common.MockCatalogItemId02, PictureUri = Device.RuntimePlatform != Device.UWP ? "fake_product_02.png" : "Assets/fake_product_02.png", Name = ".NET Bot Purple Sweatshirt (M)", Price = 19.50M, CatalogBrandId = 2, CatalogBrand = "Visual Studio", CatalogTypeId = 2, CatalogType = "T-Shirt" },
new CatalogItem { Id = Common.Common.MockCatalogItemId03, PictureUri = Device.RuntimePlatform != Device.UWP ? "fake_product_03.png" : "Assets/fake_product_03.png", Name = ".NET Bot Black Sweatshirt (M)", Price = 19.95M, CatalogBrandId = 2, CatalogBrand = "Visual Studio", CatalogTypeId = 2, CatalogType = "T-Shirt" },
new CatalogItem { Id = Common.Common.MockCatalogItemId04, PictureUri = Device.RuntimePlatform != Device.UWP ? "fake_product_04.png" : "Assets/fake_product_04.png", Name = ".NET Black Cupt", Price = 17.00M, CatalogBrandId = 2, CatalogBrand = "Visual Studio", CatalogTypeId = 1, CatalogType = "Mug" },
new CatalogItem { Id = Common.Common.MockCatalogItemId05, PictureUri = Device.RuntimePlatform != Device.UWP ? "fake_product_05.png" : "Assets/fake_product_05.png", Name = "Azure Black Sweatshirt (M)", Price = 19.50M, CatalogBrandId = 1, CatalogBrand = "Azure", CatalogTypeId = 2, CatalogType = "T-Shirt" }
};
public async Task<ObservableCollection<CatalogItem>> GetCatalogAsync()
{
await Task.Delay(500);
await Task.Delay(10);
return MockCatalog;
}
public async Task<ObservableCollection<CatalogItem>> FilterAsync(int catalogBrandId, int catalogTypeId)
{
await Task.Delay(500);
await Task.Delay(10);
return MockCatalog
.Where(c => c.CatalogBrandId == catalogBrandId &&
c.CatalogTypeId == catalogTypeId)
c.CatalogTypeId == catalogTypeId)
.ToObservableCollection();
}
public async Task<ObservableCollection<CatalogBrand>> GetCatalogBrandAsync()
{
await Task.Delay(500);
await Task.Delay(10);
return MockCatalogBrand;
}
public async Task<ObservableCollection<CatalogType>> GetCatalogTypeAsync()
{
await Task.Delay(500);
await Task.Delay(10);
return MockCatalogType;
}

View File

@ -5,29 +5,30 @@ using eShopOnContainers.Core.Models.Catalog;
using eShopOnContainers.Core.Services.RequestProvider;
using eShopOnContainers.Core.Extensions;
using System.Collections.Generic;
using eShopOnContainers.Core.Helpers;
using eShopOnContainers.Core.Services.FixUri;
namespace eShopOnContainers.Core.Services.Catalog
{
public class CatalogService : ICatalogService
{
private readonly IRequestProvider _requestProvider;
private readonly IFixUriService _fixUriService;
private const string ApiUrlBase = "mobileshoppingapigw/api/v1/c/catalog";
public CatalogService(IRequestProvider requestProvider)
public CatalogService(IRequestProvider requestProvider, IFixUriService fixUriService)
{
_requestProvider = requestProvider;
_fixUriService = fixUriService;
}
public async Task<ObservableCollection<CatalogItem>> FilterAsync(int catalogBrandId, int catalogTypeId)
{
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.CatalogEndpoint);
builder.Path = string.Format("api/v1/catalog/items/type/{0}/brand/{1}", catalogTypeId, catalogBrandId);
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BaseEndpoint);
builder.Path = $"{ApiUrlBase}/items/type/{catalogTypeId}/brand/{catalogBrandId}";
string uri = builder.ToString();
CatalogRoot catalog =
await _requestProvider.GetAsync<CatalogRoot>(uri);
CatalogRoot catalog = await _requestProvider.GetAsync<CatalogRoot>(uri);
if (catalog?.Data != null)
return catalog?.Data.ToObservableCollection();
@ -37,35 +38,28 @@ namespace eShopOnContainers.Core.Services.Catalog
public async Task<ObservableCollection<CatalogItem>> GetCatalogAsync()
{
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.CatalogEndpoint);
builder.Path = "api/v1/catalog/items";
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BaseEndpoint);
builder.Path = $"{ApiUrlBase}/items";
string uri = builder.ToString();
CatalogRoot catalog =
await _requestProvider.GetAsync<CatalogRoot>(uri);
CatalogRoot catalog = await _requestProvider.GetAsync<CatalogRoot>(uri);
if (catalog?.Data != null)
{
ServicesHelper.FixCatalogItemPictureUri(catalog?.Data);
_fixUriService.FixCatalogItemPictureUri(catalog?.Data);
return catalog?.Data.ToObservableCollection();
}
else
return new ObservableCollection<CatalogItem>();
return new ObservableCollection<CatalogItem>();
}
public async Task<ObservableCollection<CatalogBrand>> GetCatalogBrandAsync()
{
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.CatalogEndpoint);
builder.Path = "api/v1/catalog/catalogbrands";
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BaseEndpoint);
builder.Path = $"{ApiUrlBase}/catalogbrands";
string uri = builder.ToString();
IEnumerable<CatalogBrand> brands =
await _requestProvider.GetAsync<IEnumerable<CatalogBrand>>(uri);
IEnumerable<CatalogBrand> brands = await _requestProvider.GetAsync<IEnumerable<CatalogBrand>>(uri);
if (brands != null)
return brands?.ToObservableCollection();
@ -75,19 +69,16 @@ namespace eShopOnContainers.Core.Services.Catalog
public async Task<ObservableCollection<CatalogType>> GetCatalogTypeAsync()
{
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.CatalogEndpoint);
builder.Path = "api/v1/catalog/catalogtypes";
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BaseEndpoint);
builder.Path = $"{ApiUrlBase}/catalogtypes";
string uri = builder.ToString();
IEnumerable<CatalogType> types =
await _requestProvider.GetAsync<IEnumerable<CatalogType>>(uri);
IEnumerable<CatalogType> types = await _requestProvider.GetAsync<IEnumerable<CatalogType>>(uri);
if (types != null)
return types.ToObservableCollection();
else
return new ObservableCollection<CatalogType>();
return new ObservableCollection<CatalogType>();
}
}
}

View File

@ -0,0 +1,10 @@
namespace eShopOnContainers.Core.Services.Dependency
{
public class DependencyService : IDependencyService
{
public T Get<T>() where T : class
{
return Xamarin.Forms.DependencyService.Get<T>();
}
}
}

View File

@ -0,0 +1,7 @@
namespace eShopOnContainers.Core.Services.Dependency
{
public interface IDependencyService
{
T Get<T>() where T : class;
}
}

View File

@ -6,14 +6,22 @@ using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Text.RegularExpressions;
using eShopOnContainers.Core.Services.Settings;
namespace eShopOnContainers.Core.Helpers
namespace eShopOnContainers.Core.Services.FixUri
{
public static class ServicesHelper
public class FixUriService : IFixUriService
{
private static Regex IpRegex = new Regex(@"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b");
private readonly ISettingsService _settingsService;
public static void FixCatalogItemPictureUri(IEnumerable<CatalogItem> catalogItems)
private Regex IpRegex = new Regex(@"\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b");
public FixUriService(ISettingsService settingsService)
{
_settingsService = settingsService;
}
public void FixCatalogItemPictureUri(IEnumerable<CatalogItem> catalogItems)
{
if (catalogItems == null)
{
@ -23,12 +31,12 @@ namespace eShopOnContainers.Core.Helpers
try
{
if (!ViewModelLocator.UseMockService
&& Settings.UrlBase != GlobalSetting.DefaultEndpoint)
&& _settingsService.UrlBase != GlobalSetting.DefaultEndpoint)
{
foreach (var catalogItem in catalogItems)
{
MatchCollection serverResult = IpRegex.Matches(catalogItem.PictureUri);
MatchCollection localResult = IpRegex.Matches(Settings.UrlBase);
MatchCollection localResult = IpRegex.Matches(_settingsService.UrlBase);
if (serverResult.Count != -1 && localResult.Count != -1)
{
@ -46,7 +54,7 @@ namespace eShopOnContainers.Core.Helpers
}
}
public static void FixBasketItemPictureUri(IEnumerable<BasketItem> basketItems)
public void FixBasketItemPictureUri(IEnumerable<BasketItem> basketItems)
{
if (basketItems == null)
{
@ -56,12 +64,12 @@ namespace eShopOnContainers.Core.Helpers
try
{
if (!ViewModelLocator.UseMockService
&& Settings.UrlBase != GlobalSetting.DefaultEndpoint)
&& _settingsService.UrlBase != GlobalSetting.DefaultEndpoint)
{
foreach (var basketItem in basketItems)
{
MatchCollection serverResult = IpRegex.Matches(basketItem.PictureUrl);
MatchCollection localResult = IpRegex.Matches(Settings.UrlBase);
MatchCollection localResult = IpRegex.Matches(_settingsService.UrlBase);
if (serverResult.Count != -1 && localResult.Count != -1)
{
@ -78,7 +86,7 @@ namespace eShopOnContainers.Core.Helpers
}
}
public static void FixCampaignItemPictureUri(IEnumerable<CampaignItem> campaignItems)
public void FixCampaignItemPictureUri(IEnumerable<CampaignItem> campaignItems)
{
if (campaignItems == null)
{
@ -88,12 +96,12 @@ namespace eShopOnContainers.Core.Helpers
try
{
if (!ViewModelLocator.UseMockService
&& Settings.UrlBase != GlobalSetting.DefaultEndpoint)
&& _settingsService.UrlBase != GlobalSetting.DefaultEndpoint)
{
foreach (var campaignItem in campaignItems)
{
MatchCollection serverResult = IpRegex.Matches(campaignItem.PictureUri);
MatchCollection localResult = IpRegex.Matches(Settings.UrlBase);
MatchCollection localResult = IpRegex.Matches(_settingsService.UrlBase);
if (serverResult.Count != -1 && localResult.Count != -1)
{

View File

@ -0,0 +1,14 @@
using System.Collections.Generic;
using eShopOnContainers.Core.Models.Basket;
using eShopOnContainers.Core.Models.Catalog;
using eShopOnContainers.Core.Models.Marketing;
namespace eShopOnContainers.Core.Services.FixUri
{
public interface IFixUriService
{
void FixCatalogItemPictureUri(IEnumerable<CatalogItem> catalogItems);
void FixBasketItemPictureUri(IEnumerable<BasketItem> basketItems);
void FixCampaignItemPictureUri(IEnumerable<CampaignItem> campaignItems);
}
}

View File

@ -0,0 +1,23 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
namespace eShopOnContainers.Core.Services.Identity
{
public class AuthorizeRequest
{
readonly Uri _authorizeEndpoint;
public AuthorizeRequest(string authorizeEndpoint)
{
_authorizeEndpoint = new Uri(authorizeEndpoint);
}
public string Create(IDictionary<string, string> values)
{
var queryString = string.Join("&", values.Select(kvp => string.Format("{0}={1}", WebUtility.UrlEncode(kvp.Key), WebUtility.UrlEncode(kvp.Value))).ToArray());
return string.Format("{0}?{1}", _authorizeEndpoint.AbsoluteUri, queryString);
}
}
}

View File

@ -7,7 +7,6 @@ using eShopOnContainers.Core.Services.RequestProvider;
using eShopOnContainers.Core.Models.Token;
using eShopOnContainers.Core.Helpers;
using IdentityModel;
using IdentityModel.Client;
using PCLCrypto;
using static PCLCrypto.WinRTCrypto;
@ -15,13 +14,13 @@ namespace eShopOnContainers.Core.Services.Identity
{
public class IdentityService : IIdentityService
{
private readonly IRequestProvider _requestProvider;
private readonly IRequestProvider _requestProvider;
private string _codeVerifier;
public IdentityService(IRequestProvider requestProvider)
{
_requestProvider = requestProvider;
}
public IdentityService(IRequestProvider requestProvider)
{
_requestProvider = requestProvider;
}
public string CreateAuthorizationRequest()
{
@ -31,7 +30,7 @@ namespace eShopOnContainers.Core.Services.Identity
// Dictionary with values for the authorize request
var dic = new Dictionary<string, string>();
dic.Add("client_id", GlobalSetting.Instance.ClientId);
dic.Add("client_secret", GlobalSetting.Instance.ClientSecret);
dic.Add("client_secret", GlobalSetting.Instance.ClientSecret);
dic.Add("response_type", "code id_token");
dic.Add("scope", "openid profile basket orders locations marketing offline_access");
dic.Add("redirect_uri", GlobalSetting.Instance.IdentityCallback);
@ -43,7 +42,7 @@ namespace eShopOnContainers.Core.Services.Identity
var currentCSRFToken = Guid.NewGuid().ToString("N");
dic.Add("state", currentCSRFToken);
var authorizeUri = authorizeRequest.Create(dic);
var authorizeUri = authorizeRequest.Create(dic);
return authorizeUri;
}
@ -54,18 +53,18 @@ namespace eShopOnContainers.Core.Services.Identity
return string.Empty;
}
return string.Format("{0}?id_token_hint={1}&post_logout_redirect_uri={2}",
return string.Format("{0}?id_token_hint={1}&post_logout_redirect_uri={2}",
GlobalSetting.Instance.LogoutEndpoint,
token,
GlobalSetting.Instance.LogoutCallback);
}
public async Task<UserToken> GetTokenAsync(string code)
{
string data = string.Format("grant_type=authorization_code&code={0}&redirect_uri={1}&code_verifier={2}", code, WebUtility.UrlEncode(GlobalSetting.Instance.IdentityCallback), _codeVerifier);
var token = await _requestProvider.PostAsync<UserToken>(GlobalSetting.Instance.TokenEndpoint, data, GlobalSetting.Instance.ClientId, GlobalSetting.Instance.ClientSecret);
return token;
}
public async Task<UserToken> GetTokenAsync(string code)
{
string data = string.Format("grant_type=authorization_code&code={0}&redirect_uri={1}&code_verifier={2}", code, WebUtility.UrlEncode(GlobalSetting.Instance.IdentityCallback), _codeVerifier);
var token = await _requestProvider.PostAsync<UserToken>(GlobalSetting.Instance.TokenEndpoint, data, GlobalSetting.Instance.ClientId, GlobalSetting.Instance.ClientSecret);
return token;
}
private string CreateCodeChallenge()
{

View File

@ -1,10 +1,9 @@
namespace eShopOnContainers.Core.Services.Location
{
using System.Threading.Tasks;
using Models.Location;
using System.Threading.Tasks;
namespace eShopOnContainers.Core.Services.Location
{
public interface ILocationService
{
Task UpdateUserLocation(Location newLocReq, string token);
Task UpdateUserLocation(eShopOnContainers.Core.Models.Location.Location newLocReq, string token);
}
}

View File

@ -0,0 +1,16 @@
using eShopOnContainers.Core.Models.Location;
using System;
using System.Threading;
using System.Threading.Tasks;
namespace eShopOnContainers.Core.Services.Location
{
public interface ILocationServiceImplementation
{
double DesiredAccuracy { get; set; }
bool IsGeolocationAvailable { get; }
bool IsGeolocationEnabled { get; }
Task<Position> GetPositionAsync(TimeSpan? timeout = null, CancellationToken? token = null);
}
}

View File

@ -1,10 +1,9 @@
namespace eShopOnContainers.Core.Services.Location
{
using System;
using System.Threading.Tasks;
using Models.Location;
using RequestProvider;
using System;
using System.Threading.Tasks;
using eShopOnContainers.Core.Services.RequestProvider;
namespace eShopOnContainers.Core.Services.Location
{
public class LocationService : ILocationService
{
private readonly IRequestProvider _requestProvider;
@ -14,14 +13,11 @@
_requestProvider = requestProvider;
}
public async Task UpdateUserLocation(Location newLocReq, string token)
public async Task UpdateUserLocation(eShopOnContainers.Core.Models.Location.Location newLocReq, string token)
{
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.LocationEndpoint);
builder.Path = "api/v1/locations";
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BaseEndpoint);
builder.Path = "/mobilemarketingapigw/api/v1/l/locations";
string uri = builder.ToString();
await _requestProvider.PostAsync(uri, newLocReq, token);
}
}

View File

@ -1,9 +1,9 @@
using System;
using eShopOnContainers.Core.Models.Marketing;
using System;
using System.Collections.ObjectModel;
using System.Threading.Tasks;
using System.Linq;
using System.Threading.Tasks;
using Xamarin.Forms;
using eShopOnContainers.Core.Models.Marketing;
namespace eShopOnContainers.Core.Services.Marketing
{
@ -38,13 +38,13 @@ namespace eShopOnContainers.Core.Services.Marketing
public async Task<ObservableCollection<CampaignItem>> GetAllCampaignsAsync(string token)
{
await Task.Delay(500);
await Task.Delay(10);
return _mockCampaign;
}
public async Task<CampaignItem> GetCampaignByIdAsync(int campaignId, string token)
{
await Task.Delay(500);
await Task.Delay(10);
return _mockCampaign.SingleOrDefault(c => c.Id == campaignId);
}
}

View File

@ -1,37 +1,37 @@
using System;
using eShopOnContainers.Core.Extensions;
using eShopOnContainers.Core.Models.Marketing;
using eShopOnContainers.Core.Services.FixUri;
using eShopOnContainers.Core.Services.RequestProvider;
using System;
using System.Collections.ObjectModel;
using System.Threading.Tasks;
using eShopOnContainers.Core.Models.Marketing;
using eShopOnContainers.Core.Services.RequestProvider;
using eShopOnContainers.Core.Extensions;
using eShopOnContainers.Core.Helpers;
namespace eShopOnContainers.Core.Services.Marketing
{
public class CampaignService : ICampaignService
{
private readonly IRequestProvider _requestProvider;
private readonly IFixUriService _fixUriService;
public CampaignService(IRequestProvider requestProvider)
private const string ApiUrlBase = "mobilemarketingapigw/api/v1/m/campaigns";
public CampaignService(IRequestProvider requestProvider, IFixUriService fixUriService)
{
_requestProvider = requestProvider;
_fixUriService = fixUriService;
}
public async Task<ObservableCollection<CampaignItem>> GetAllCampaignsAsync(string token)
{
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.MarketingEndpoint);
builder.Path = "api/v1/campaigns/user";
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BaseEndpoint);
builder.Path = $"{ApiUrlBase}/user";
string uri = builder.ToString();
CampaignRoot campaign =
await _requestProvider.GetAsync<CampaignRoot>(uri, token);
CampaignRoot campaign = await _requestProvider.GetAsync<CampaignRoot>(uri, token);
if (campaign?.Data != null)
{
ServicesHelper.FixCampaignItemPictureUri(campaign?.Data);
_fixUriService.FixCampaignItemPictureUri(campaign?.Data);
return campaign?.Data.ToObservableCollection();
}
@ -40,12 +40,9 @@ namespace eShopOnContainers.Core.Services.Marketing
public async Task<CampaignItem> GetCampaignByIdAsync(int campaignId, string token)
{
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.MarketingEndpoint);
builder.Path = $"api/v1/campaigns/{campaignId}";
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BaseEndpoint);
builder.Path = $"{ApiUrlBase}/{campaignId}";
string uri = builder.ToString();
return await _requestProvider.GetAsync<CampaignItem>(uri, token);
}
}

View File

@ -1,6 +1,6 @@
using System.Collections.ObjectModel;
using eShopOnContainers.Core.Models.Marketing;
using System.Collections.ObjectModel;
using System.Threading.Tasks;
using eShopOnContainers.Core.Models.Marketing;
namespace eShopOnContainers.Core.Services.Marketing
{

View File

@ -1,7 +1,7 @@
using eShopOnContainers.Core.Helpers;
using eShopOnContainers.Core.Services.Settings;
using eShopOnContainers.Core.ViewModels;
using eShopOnContainers.Core.Views;
using eShopOnContainers.Core.ViewModels.Base;
using eShopOnContainers.Core.Views;
using System;
using System.Globalization;
using System.Reflection;
@ -12,19 +12,26 @@ namespace eShopOnContainers.Services
{
public class NavigationService : INavigationService
{
public ViewModelBase PreviousPageViewModel
{
get
{
var mainPage = Application.Current.MainPage as CustomNavigationView;
var viewModel = mainPage.Navigation.NavigationStack[mainPage.Navigation.NavigationStack.Count - 2].BindingContext;
return viewModel as ViewModelBase;
}
}
private readonly ISettingsService _settingsService;
public ViewModelBase PreviousPageViewModel
{
get
{
var mainPage = Application.Current.MainPage as CustomNavigationView;
var viewModel = mainPage.Navigation.NavigationStack[mainPage.Navigation.NavigationStack.Count - 2].BindingContext;
return viewModel as ViewModelBase;
}
}
public NavigationService(ISettingsService settingsService)
{
_settingsService = settingsService;
}
public Task InitializeAsync()
{
if(string.IsNullOrEmpty(Settings.AuthAccessToken))
if (string.IsNullOrEmpty(_settingsService.AuthAccessToken))
return NavigateToAsync<LoginViewModel>();
else
return NavigateToAsync<MainViewModel>();
@ -78,7 +85,7 @@ namespace eShopOnContainers.Services
Application.Current.MainPage = new CustomNavigationView(page);
}
else
{
{
var navigationPage = Application.Current.MainPage as CustomNavigationView;
if (navigationPage != null)
{
@ -93,25 +100,25 @@ namespace eShopOnContainers.Services
await (page.BindingContext as ViewModelBase).InitializeAsync(parameter);
}
private Type GetPageTypeForViewModel(Type viewModelType)
{
var viewName = viewModelType.FullName.Replace("Model", string.Empty);
var viewModelAssemblyName = viewModelType.GetTypeInfo().Assembly.FullName;
var viewAssemblyName = string.Format(CultureInfo.InvariantCulture, "{0}, {1}", viewName, viewModelAssemblyName);
var viewType = Type.GetType(viewAssemblyName);
return viewType;
}
private Type GetPageTypeForViewModel(Type viewModelType)
{
var viewName = viewModelType.FullName.Replace("Model", string.Empty);
var viewModelAssemblyName = viewModelType.GetTypeInfo().Assembly.FullName;
var viewAssemblyName = string.Format(CultureInfo.InvariantCulture, "{0}, {1}", viewName, viewModelAssemblyName);
var viewType = Type.GetType(viewAssemblyName);
return viewType;
}
private Page CreatePage(Type viewModelType, object parameter)
{
Type pageType = GetPageTypeForViewModel(viewModelType);
if (pageType == null)
{
throw new Exception($"Cannot locate page type for {viewModelType}");
}
private Page CreatePage(Type viewModelType, object parameter)
{
Type pageType = GetPageTypeForViewModel(viewModelType);
if (pageType == null)
{
throw new Exception($"Cannot locate page type for {viewModelType}");
}
Page page = Activator.CreateInstance(pageType) as Page;
return page;
}
Page page = Activator.CreateInstance(pageType) as Page;
return page;
}
}
}

View File

@ -2,7 +2,6 @@
using System.Collections.ObjectModel;
using System.Threading.Tasks;
namespace eShopOnContainers.Core.Services.Order
{
public interface IOrderService

View File

@ -74,7 +74,7 @@ namespace eShopOnContainers.Core.Services.Order
public async Task<ObservableCollection<Models.Orders.Order>> GetOrdersAsync(string token)
{
await Task.Delay(500);
await Task.Delay(10);
if (!string.IsNullOrEmpty(token))
{
@ -88,7 +88,7 @@ namespace eShopOnContainers.Core.Services.Order
public async Task<Models.Orders.Order> GetOrderAsync(int orderId, string token)
{
await Task.Delay(500);
await Task.Delay(10);
if (!string.IsNullOrEmpty(token))
return MockOrders
@ -99,7 +99,7 @@ namespace eShopOnContainers.Core.Services.Order
public async Task CreateOrderAsync(Models.Orders.Order newOrder, string token)
{
await Task.Delay(500);
await Task.Delay(10);
if (!string.IsNullOrEmpty(token))
{

View File

@ -1,10 +1,9 @@
using eShopOnContainers.Core.Models.Basket;
using eShopOnContainers.Core.Models.Orders;
using eShopOnContainers.Core.Services.RequestProvider;
using System;
using System.Collections.ObjectModel;
using System.Net.Http;
using System.Threading.Tasks;
using eShopOnContainers.Core.Models.Orders;
namespace eShopOnContainers.Core.Services.Order
{
@ -12,6 +11,8 @@ namespace eShopOnContainers.Core.Services.Order
{
private readonly IRequestProvider _requestProvider;
private const string ApiUrlBase = "mobileshoppingapigw/api/v1/o/orders";
public OrderService(IRequestProvider requestProvider)
{
_requestProvider = requestProvider;
@ -24,9 +25,9 @@ namespace eShopOnContainers.Core.Services.Order
public async Task<ObservableCollection<Models.Orders.Order>> GetOrdersAsync(string token)
{
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.OrdersEndpoint);
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BaseEndpoint);
builder.Path = "api/v1/orders";
builder.Path = ApiUrlBase;
string uri = builder.ToString();
@ -41,9 +42,9 @@ namespace eShopOnContainers.Core.Services.Order
{
try
{
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.OrdersEndpoint);
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BaseEndpoint);
builder.Path = string.Format("api/v1/orders/{0}", orderId);
builder.Path = $"{ApiUrlBase}/{orderId}";
string uri = builder.ToString();
@ -77,9 +78,9 @@ namespace eShopOnContainers.Core.Services.Order
public async Task<bool> CancelOrderAsync(int orderId, string token)
{
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.OrdersEndpoint);
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.BaseEndpoint);
builder.Path = "api/v1/orders/cancel";
builder.Path = $"{ApiUrlBase}/cancel";
var cancelOrderCommand = new CancelOrderCommand(orderId);

View File

@ -0,0 +1,12 @@
using System.Collections.Generic;
using System.Threading.Tasks;
using eShopOnContainers.Core.Models.Permissions;
namespace eShopOnContainers.Core.Services.Permissions
{
public interface IPermissionsService
{
Task<PermissionStatus> CheckPermissionStatusAsync(Permission permission);
Task<Dictionary<Permission, PermissionStatus>> RequestPermissionsAsync(params Permission[] permissions);
}
}

View File

@ -1,9 +1,5 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
namespace eShopOnContainers.Core.Services.RequestProvider
{

View File

@ -2,11 +2,11 @@
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
using Newtonsoft.Json.Serialization;
using System;
using System.Net;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using System;
namespace eShopOnContainers.Core.Services.RequestProvider
{

View File

@ -0,0 +1,14 @@
namespace eShopOnContainers.Core.Services.Settings
{
public interface ISettingsService
{
string AuthAccessToken { get; set; }
string AuthIdToken { get; set; }
bool UseMocks { get; set; }
string UrlBase { get; set; }
bool UseFakeLocation { get; set; }
string Latitude { get; set; }
string Longitude { get; set; }
bool AllowGpsLocation { get; set; }
}
}

View File

@ -0,0 +1,13 @@
namespace eShopOnContainers.Core.Services.Settings
{
public interface ISettingsServiceImplementation
{
bool GetValueOrDefault(string key, bool defaultValue);
string GetValueOrDefault(string key, string defaultValue);
bool AddOrUpdateValue(string key, bool value);
bool AddOrUpdateValue(string key, string value);
void Remove(string key);
}
}

View File

@ -0,0 +1,88 @@
using eShopOnContainers.Core.Services.Dependency;
namespace eShopOnContainers.Core.Services.Settings
{
public class SettingsService : ISettingsService
{
private readonly ISettingsServiceImplementation _settingsService;
ISettingsServiceImplementation AppSettings
{
get { return _settingsService; }
}
public SettingsService(IDependencyService dependencyService)
{
_settingsService = dependencyService.Get<ISettingsServiceImplementation>();
}
#region Setting Constants
private const string AccessToken = "access_token";
private const string IdToken = "id_token";
private const string IdUseMocks = "use_mocks";
private const string IdUrlBase = "url_base";
private const string IdUseFakeLocation = "use_fake_location";
private const string IdLatitude = "latitude";
private const string IdLongitude = "longitude";
private const string IdAllowGpsLocation = "allow_gps_location";
private readonly string AccessTokenDefault = string.Empty;
private readonly string IdTokenDefault = string.Empty;
private readonly bool UseMocksDefault = true;
private readonly bool UseFakeLocationDefault = false;
private readonly bool AllowGpsLocationDefault = false;
private readonly double FakeLatitudeDefault = 47.604610d;
private readonly double FakeLongitudeDefault = -122.315752d;
private readonly string UrlBaseDefault = GlobalSetting.Instance.BaseEndpoint;
#endregion
public string AuthAccessToken
{
get => AppSettings.GetValueOrDefault(AccessToken, AccessTokenDefault);
set => AppSettings.AddOrUpdateValue(AccessToken, value);
}
public string AuthIdToken
{
get => AppSettings.GetValueOrDefault(IdToken, IdTokenDefault);
set => AppSettings.AddOrUpdateValue(IdToken, value);
}
public bool UseMocks
{
get => AppSettings.GetValueOrDefault(IdUseMocks, UseMocksDefault);
set => AppSettings.AddOrUpdateValue(IdUseMocks, value);
}
public string UrlBase
{
get => AppSettings.GetValueOrDefault(IdUrlBase, UrlBaseDefault);
set => AppSettings.AddOrUpdateValue(IdUrlBase, value);
}
public bool UseFakeLocation
{
get => AppSettings.GetValueOrDefault(IdUseFakeLocation, UseFakeLocationDefault);
set => AppSettings.AddOrUpdateValue(IdUseFakeLocation, value);
}
public string Latitude
{
get => AppSettings.GetValueOrDefault(IdLatitude, FakeLatitudeDefault.ToString());
set => AppSettings.AddOrUpdateValue(IdLatitude, value);
}
public string Longitude
{
get => AppSettings.GetValueOrDefault(IdLongitude, FakeLongitudeDefault.ToString());
set => AppSettings.AddOrUpdateValue(IdLongitude, value);
}
public bool AllowGpsLocation
{
get => AppSettings.GetValueOrDefault(IdAllowGpsLocation, AllowGpsLocationDefault);
set => AppSettings.AddOrUpdateValue(IdAllowGpsLocation, value);
}
}
}

View File

@ -1,5 +1,5 @@
using System;
using eShopOnContainers.Core.Models.User;
using eShopOnContainers.Core.Models.User;
using System;
using System.Threading.Tasks;
namespace eShopOnContainers.Core.Services.User
@ -28,8 +28,7 @@ namespace eShopOnContainers.Core.Services.User
public async Task<UserInfo> GetUserInfoAsync(string authToken)
{
await Task.Delay(500);
await Task.Delay(10);
return MockUserInfo;
}
}

View File

@ -1,7 +1,7 @@
using eShopOnContainers.Core.Services.RequestProvider;
using eShopOnContainers.Core.Models.User;
using eShopOnContainers.Core.Services.RequestProvider;
using System;
using System.Threading.Tasks;
using eShopOnContainers.Core.Models.User;
namespace eShopOnContainers.Core.Services.User
{
@ -17,12 +17,8 @@ namespace eShopOnContainers.Core.Services.User
public async Task<UserInfo> GetUserInfoAsync(string authToken)
{
UriBuilder builder = new UriBuilder(GlobalSetting.Instance.UserInfoEndpoint);
string uri = builder.ToString();
var userInfo =
await _requestProvider.GetAsync<UserInfo>(uri, authToken);
var userInfo = await _requestProvider.GetAsync<UserInfo>(uri, authToken);
return userInfo;
}
}

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,4 @@
using eShopOnContainers.Core.Helpers;
using eShopOnContainers.Core.Services.Settings;
using eShopOnContainers.Services;
using System.Threading.Tasks;
@ -29,7 +29,7 @@ namespace eShopOnContainers.Core.ViewModels.Base
{
DialogService = ViewModelLocator.Resolve<IDialogService>();
NavigationService = ViewModelLocator.Resolve<INavigationService>();
GlobalSetting.Instance.BaseEndpoint = Settings.UrlBase;
GlobalSetting.Instance.BaseEndpoint = ViewModelLocator.Resolve<ISettingsService>().UrlBase;
}
public virtual Task InitializeAsync(object navigationData)

View File

@ -1,117 +1,131 @@
using Autofac;
using eShopOnContainers.Core.Services.Basket;
using eShopOnContainers.Core.Services.Catalog;
using eShopOnContainers.Core.Services.Dependency;
using eShopOnContainers.Core.Services.FixUri;
using eShopOnContainers.Core.Services.Identity;
using eShopOnContainers.Core.Services.Location;
using eShopOnContainers.Core.Services.Marketing;
using eShopOnContainers.Core.Services.OpenUrl;
using eShopOnContainers.Core.Services.Order;
using eShopOnContainers.Core.Services.RequestProvider;
using eShopOnContainers.Core.Services.Settings;
using eShopOnContainers.Core.Services.User;
using eShopOnContainers.Services;
using System;
using System.Globalization;
using System.Reflection;
using eShopOnContainers.Core.Services.Catalog;
using eShopOnContainers.Core.Services.OpenUrl;
using eShopOnContainers.Core.Services.RequestProvider;
using eShopOnContainers.Core.Services.Basket;
using eShopOnContainers.Core.Services.Identity;
using eShopOnContainers.Core.Services.Order;
using eShopOnContainers.Core.Services.User;
using TinyIoC;
using Xamarin.Forms;
using eShopOnContainers.Core.Services.Location;
using eShopOnContainers.Core.Services.Marketing;
namespace eShopOnContainers.Core.ViewModels.Base
{
public static class ViewModelLocator
{
private static IContainer _container;
private static TinyIoCContainer _container;
public static readonly BindableProperty AutoWireViewModelProperty =
BindableProperty.CreateAttached("AutoWireViewModel", typeof(bool), typeof(ViewModelLocator), default(bool), propertyChanged: OnAutoWireViewModelChanged);
public static readonly BindableProperty AutoWireViewModelProperty =
BindableProperty.CreateAttached("AutoWireViewModel", typeof(bool), typeof(ViewModelLocator), default(bool), propertyChanged: OnAutoWireViewModelChanged);
public static bool GetAutoWireViewModel(BindableObject bindable)
{
return (bool)bindable.GetValue(ViewModelLocator.AutoWireViewModelProperty);
}
public static bool GetAutoWireViewModel(BindableObject bindable)
{
return (bool)bindable.GetValue(ViewModelLocator.AutoWireViewModelProperty);
}
public static void SetAutoWireViewModel(BindableObject bindable, bool value)
{
bindable.SetValue(ViewModelLocator.AutoWireViewModelProperty, value);
}
public static void SetAutoWireViewModel(BindableObject bindable, bool value)
{
bindable.SetValue(ViewModelLocator.AutoWireViewModelProperty, value);
}
public static bool UseMockService { get; set; }
public static bool UseMockService { get; set; }
public static void RegisterDependencies(bool useMockServices)
{
var builder = new ContainerBuilder();
static ViewModelLocator()
{
_container = new TinyIoCContainer();
// View models
builder.RegisterType<BasketViewModel>();
builder.RegisterType<CatalogViewModel>();
builder.RegisterType<CheckoutViewModel>();
builder.RegisterType<LoginViewModel>();
builder.RegisterType<MainViewModel>();
builder.RegisterType<OrderDetailViewModel>();
builder.RegisterType<ProfileViewModel>();
builder.RegisterType<SettingsViewModel>();
builder.RegisterType<CampaignViewModel>();
builder.RegisterType<CampaignDetailsViewModel>();
// View models - by default, TinyIoC will register concrete classes as multi-instance.
_container.Register<BasketViewModel>();
_container.Register<CatalogViewModel>();
_container.Register<CheckoutViewModel>();
_container.Register<LoginViewModel>();
_container.Register<MainViewModel>();
_container.Register<OrderDetailViewModel>();
_container.Register<ProfileViewModel>();
_container.Register<SettingsViewModel>();
_container.Register<CampaignViewModel>();
_container.Register<CampaignDetailsViewModel>();
// Services
builder.RegisterType<NavigationService>().As<INavigationService>().SingleInstance();
builder.RegisterType<DialogService>().As<IDialogService>();
builder.RegisterType<OpenUrlService>().As<IOpenUrlService>();
builder.RegisterType<IdentityService>().As<IIdentityService>();
builder.RegisterType<RequestProvider>().As<IRequestProvider>();
builder.RegisterType<LocationService>().As<ILocationService>().SingleInstance();
// Services - by default, TinyIoC will register interface registrations as singletons.
_container.Register<INavigationService, NavigationService>();
_container.Register<IDialogService, DialogService>();
_container.Register<IOpenUrlService, OpenUrlService>();
_container.Register<IIdentityService, IdentityService>();
_container.Register<IRequestProvider, RequestProvider>();
_container.Register<IDependencyService, Services.Dependency.DependencyService>();
_container.Register<ISettingsService, SettingsService>();
_container.Register<IFixUriService, FixUriService>();
_container.Register<ILocationService, LocationService>();
_container.Register<ICatalogService, CatalogMockService>();
_container.Register<IBasketService, BasketMockService>();
_container.Register<IOrderService, OrderMockService>();
_container.Register<IUserService, UserMockService>();
_container.Register<ICampaignService, CampaignMockService>();
}
public static void UpdateDependencies(bool useMockServices)
{
// Change injected dependencies
if (useMockServices)
{
builder.RegisterInstance(new CatalogMockService()).As<ICatalogService>();
builder.RegisterInstance(new BasketMockService()).As<IBasketService>();
builder.RegisterInstance(new OrderMockService()).As<IOrderService>();
builder.RegisterInstance(new UserMockService()).As<IUserService>();
builder.RegisterInstance(new CampaignMockService()).As<ICampaignService>();
{
_container.Register<ICatalogService, CatalogMockService>();
_container.Register<IBasketService, BasketMockService>();
_container.Register<IOrderService, OrderMockService>();
_container.Register<IUserService, UserMockService>();
_container.Register<ICampaignService, CampaignMockService>();
UseMockService = true;
}
else
{
builder.RegisterType<CatalogService>().As<ICatalogService>().SingleInstance();
builder.RegisterType<BasketService>().As<IBasketService>().SingleInstance();
builder.RegisterType<OrderService>().As<IOrderService>().SingleInstance();
builder.RegisterType<UserService>().As<IUserService>().SingleInstance();
builder.RegisterType<CampaignService>().As<ICampaignService>().SingleInstance();
}
else
{
_container.Register<ICatalogService, CatalogService>();
_container.Register<IBasketService, BasketService>();
_container.Register<IOrderService, OrderService>();
_container.Register<IUserService, UserService>();
_container.Register<ICampaignService, CampaignService>();
UseMockService = false;
}
}
}
if (_container != null)
{
_container.Dispose();
}
_container = builder.Build();
}
public static void RegisterSingleton<TInterface, T>() where TInterface : class where T : class, TInterface
{
_container.Register<TInterface, T>().AsSingleton();
}
public static T Resolve<T>()
{
return _container.Resolve<T>();
}
public static T Resolve<T>() where T : class
{
return _container.Resolve<T>();
}
private static void OnAutoWireViewModelChanged(BindableObject bindable, object oldValue, object newValue)
{
var view = bindable as Element;
if (view == null)
{
return;
}
private static void OnAutoWireViewModelChanged(BindableObject bindable, object oldValue, object newValue)
{
var view = bindable as Element;
if (view == null)
{
return;
}
var viewType = view.GetType();
var viewName = viewType.FullName.Replace(".Views.", ".ViewModels.");
var viewAssemblyName = viewType.GetTypeInfo().Assembly.FullName;
var viewModelName = string.Format(CultureInfo.InvariantCulture, "{0}Model, {1}", viewName, viewAssemblyName);
var viewType = view.GetType();
var viewName = viewType.FullName.Replace(".Views.", ".ViewModels.");
var viewAssemblyName = viewType.GetTypeInfo().Assembly.FullName;
var viewModelName = string.Format(CultureInfo.InvariantCulture, "{0}Model, {1}", viewName, viewAssemblyName);
var viewModelType = Type.GetType(viewModelName);
if (viewModelType == null)
{
return;
}
var viewModel = _container.Resolve(viewModelType);
view.BindingContext = viewModel;
}
}
var viewModelType = Type.GetType(viewModelName);
if (viewModelType == null)
{
return;
}
var viewModel = _container.Resolve(viewModelType);
view.BindingContext = viewModel;
}
}
}

Some files were not shown because too many files have changed in this diff Show More