From fce1286a9e0138bc4209486071c8b68e9a8b36a8 Mon Sep 17 00:00:00 2001 From: Mauro Servienti Date: Sat, 8 Feb 2025 17:35:55 +0100 Subject: [PATCH 1/7] Update to ServiceComposer and use contractless composition handlers --- .../Catalog.ViewModelComposition.csproj | 2 +- .../When_calling_composition_gateway.cs | 2 +- .../CompositionGateway.csproj | 2 +- .../CompositionGateway/Startup.cs | 2 ++ .../ConfigurationUtils.csproj | 2 +- .../Sales.ViewModelComposition.csproj | 2 +- .../Shipping.ViewModelComposition.csproj | 2 +- .../ProductDetailsCompositionHandler.cs | 24 +++++++++++++ .../ProductDetailsGetHandler.cs | 35 ------------------- ...iewModelCompositionOptionsCustomization.cs | 7 ++-- .../Warehouse.ViewModelComposition.csproj | 2 +- 11 files changed, 36 insertions(+), 46 deletions(-) create mode 100644 ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/CompositionHandlers/ProductDetailsCompositionHandler.cs delete mode 100644 ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/ProductDetailsGetHandler.cs diff --git a/ASP.Net Core API Gateway - 01/Catalog.ViewModelComposition/Catalog.ViewModelComposition.csproj b/ASP.Net Core API Gateway - 01/Catalog.ViewModelComposition/Catalog.ViewModelComposition.csproj index affccdf5..793acc7f 100644 --- a/ASP.Net Core API Gateway - 01/Catalog.ViewModelComposition/Catalog.ViewModelComposition.csproj +++ b/ASP.Net Core API Gateway - 01/Catalog.ViewModelComposition/Catalog.ViewModelComposition.csproj @@ -6,7 +6,7 @@ - + diff --git a/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs b/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs index e2e005ee..c59fb228 100644 --- a/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs +++ b/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs @@ -55,7 +55,7 @@ HttpClient ClientProvider(string name) => name switch { var val when val == typeof(Shipping.ViewModelComposition.ProductDetailsGetHandler).FullName => _shippingApiClient, - var val when val == typeof(Warehouse.ViewModelComposition.ProductDetailsGetHandler).FullName => _warehouseApiClient, + var val when val == typeof(Warehouse.ViewModelComposition.CompositionHandlers.ProductDetailsCompositionHandler).FullName => _warehouseApiClient, var val when val == typeof(Sales.ViewModelComposition.ProductDetailsGetHandler).FullName => _salesApiClient, var val when val == typeof(Catalog.ViewModelComposition.ProductDetailsGetHandler).FullName => _catalogApiClient, _ => throw new NotSupportedException($"Missing HTTP client for {name}") diff --git a/ASP.Net Core API Gateway - 01/CompositionGateway/CompositionGateway.csproj b/ASP.Net Core API Gateway - 01/CompositionGateway/CompositionGateway.csproj index 22937626..489a0aa6 100644 --- a/ASP.Net Core API Gateway - 01/CompositionGateway/CompositionGateway.csproj +++ b/ASP.Net Core API Gateway - 01/CompositionGateway/CompositionGateway.csproj @@ -4,7 +4,7 @@ net8.0 - + diff --git a/ASP.Net Core API Gateway - 01/CompositionGateway/Startup.cs b/ASP.Net Core API Gateway - 01/CompositionGateway/Startup.cs index 42cb9d8d..197d72de 100644 --- a/ASP.Net Core API Gateway - 01/CompositionGateway/Startup.cs +++ b/ASP.Net Core API Gateway - 01/CompositionGateway/Startup.cs @@ -9,9 +9,11 @@ public class Startup { public void ConfigureServices(IServiceCollection services) { + services.AddHttpContextAccessor(); services.AddHttpClient(); services.AddRouting(); services.AddViewModelComposition(); + services.AddControllers(); } public void Configure(IApplicationBuilder app, ILoggerFactory loggerFactory) diff --git a/ASP.Net Core API Gateway - 01/ConfigurationUtils/ConfigurationUtils.csproj b/ASP.Net Core API Gateway - 01/ConfigurationUtils/ConfigurationUtils.csproj index ddc20af3..5309202a 100644 --- a/ASP.Net Core API Gateway - 01/ConfigurationUtils/ConfigurationUtils.csproj +++ b/ASP.Net Core API Gateway - 01/ConfigurationUtils/ConfigurationUtils.csproj @@ -5,7 +5,7 @@ - + diff --git a/ASP.Net Core API Gateway - 01/Sales.ViewModelComposition/Sales.ViewModelComposition.csproj b/ASP.Net Core API Gateway - 01/Sales.ViewModelComposition/Sales.ViewModelComposition.csproj index affccdf5..793acc7f 100644 --- a/ASP.Net Core API Gateway - 01/Sales.ViewModelComposition/Sales.ViewModelComposition.csproj +++ b/ASP.Net Core API Gateway - 01/Sales.ViewModelComposition/Sales.ViewModelComposition.csproj @@ -6,7 +6,7 @@ - + diff --git a/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/Shipping.ViewModelComposition.csproj b/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/Shipping.ViewModelComposition.csproj index 36ba9be3..77b2d4e2 100644 --- a/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/Shipping.ViewModelComposition.csproj +++ b/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/Shipping.ViewModelComposition.csproj @@ -6,7 +6,7 @@ - + diff --git a/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/CompositionHandlers/ProductDetailsCompositionHandler.cs b/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/CompositionHandlers/ProductDetailsCompositionHandler.cs new file mode 100644 index 00000000..5509f3f9 --- /dev/null +++ b/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/CompositionHandlers/ProductDetailsCompositionHandler.cs @@ -0,0 +1,24 @@ +using System.Net.Http; +using System.Threading.Tasks; +using JsonUtils; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using ServiceComposer.AspNetCore; + +namespace Warehouse.ViewModelComposition.CompositionHandlers; + +public class ProductDetailsCompositionHandler(HttpClient client, IHttpContextAccessor httpContextAccessor) +{ + [HttpGet("/products/details/{id}")] + public async Task Get(string id) + { + var url = $"/api/inventory/product/{id}"; + var response = await client.GetAsync(url); + + dynamic stockItem = await response.Content.AsExpando(); + + dynamic vm = httpContextAccessor.HttpContext.Request.GetComposedResponseModel(); + vm.ProductInventory = stockItem.Inventory; + vm.ProductOutOfStock = stockItem.Inventory == 0; + } +} \ No newline at end of file diff --git a/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/ProductDetailsGetHandler.cs b/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/ProductDetailsGetHandler.cs deleted file mode 100644 index e8c050b6..00000000 --- a/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/ProductDetailsGetHandler.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Routing; -using ServiceComposer.AspNetCore; -using JsonUtils; -using System.Net.Http; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; - -namespace Warehouse.ViewModelComposition -{ - class ProductDetailsGetHandler : ICompositionRequestsHandler - { - readonly HttpClient _client; - - public ProductDetailsGetHandler(HttpClient client) - { - _client = client; - } - - [HttpGet("/products/details/{id}")] - public async Task Handle(HttpRequest request) - { - var id = (string)request.HttpContext.GetRouteData().Values["id"]; - - var url = $"/api/inventory/product/{id}"; - var response = await _client.GetAsync(url); - - dynamic stockItem = await response.Content.AsExpando(); - - dynamic vm = request.GetComposedResponseModel(); - vm.ProductInventory = stockItem.Inventory; - vm.ProductOutOfStock = stockItem.Inventory == 0; - } - } -} diff --git a/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/ViewModelCompositionOptionsCustomization.cs b/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/ViewModelCompositionOptionsCustomization.cs index ffe9607f..96acc704 100644 --- a/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/ViewModelCompositionOptionsCustomization.cs +++ b/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/ViewModelCompositionOptionsCustomization.cs @@ -1,7 +1,6 @@ -using System; -using ConfigurationUtils; -using Microsoft.Extensions.DependencyInjection; +using ConfigurationUtils; using ServiceComposer.AspNetCore; +using Warehouse.ViewModelComposition.CompositionHandlers; namespace Warehouse.ViewModelComposition { @@ -9,7 +8,7 @@ public class ViewModelCompositionOptionsCustomization : IViewModelCompositionOpt { public void Customize(ViewModelCompositionOptions options) { - options.RegisterHttpClient("http://localhost:5003"); + options.RegisterHttpClient("http://localhost:5003"); } } } \ No newline at end of file diff --git a/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/Warehouse.ViewModelComposition.csproj b/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/Warehouse.ViewModelComposition.csproj index affccdf5..793acc7f 100644 --- a/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/Warehouse.ViewModelComposition.csproj +++ b/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/Warehouse.ViewModelComposition.csproj @@ -6,7 +6,7 @@ - + From fc35826d7ab2ec7655de3a3db869fd368b4af683 Mon Sep 17 00:00:00 2001 From: Mauro Servienti Date: Wed, 25 Jun 2025 16:41:51 +0200 Subject: [PATCH 2/7] Convert shipping composition handler to contract-less --- .../When_calling_composition_gateway.cs | 2 +- .../ProductDetailsCompositionHandler.cs | 29 ++++++++++++++ .../ProductDetailsGetHandler.cs | 40 ------------------- ...iewModelCompositionOptionsCustomization.cs | 3 +- 4 files changed, 32 insertions(+), 42 deletions(-) create mode 100644 ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/CompositionHandlers/ProductDetailsCompositionHandler.cs delete mode 100644 ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/ProductDetailsGetHandler.cs diff --git a/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs b/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs index c59fb228..2c13705b 100644 --- a/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs +++ b/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs @@ -54,7 +54,7 @@ public async Task Get_composed_product_should_return_expected_values() HttpClient ClientProvider(string name) => name switch { - var val when val == typeof(Shipping.ViewModelComposition.ProductDetailsGetHandler).FullName => _shippingApiClient, + var val when val == typeof(Shipping.ViewModelComposition.CompositionHandlers.ProductDetailsCompositionHandler).FullName => _shippingApiClient, var val when val == typeof(Warehouse.ViewModelComposition.CompositionHandlers.ProductDetailsCompositionHandler).FullName => _warehouseApiClient, var val when val == typeof(Sales.ViewModelComposition.ProductDetailsGetHandler).FullName => _salesApiClient, var val when val == typeof(Catalog.ViewModelComposition.ProductDetailsGetHandler).FullName => _catalogApiClient, diff --git a/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/CompositionHandlers/ProductDetailsCompositionHandler.cs b/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/CompositionHandlers/ProductDetailsCompositionHandler.cs new file mode 100644 index 00000000..ef872a1d --- /dev/null +++ b/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/CompositionHandlers/ProductDetailsCompositionHandler.cs @@ -0,0 +1,29 @@ +using System.Collections.Generic; +using System.Linq; +using System.Net.Http; +using System.Threading.Tasks; +using JsonUtils; +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Mvc; +using ServiceComposer.AspNetCore; + +namespace Shipping.ViewModelComposition.CompositionHandlers; + +public class ProductDetailsCompositionHandler(HttpClient client, IHttpContextAccessor httpContextAccessor) +{ + [HttpGet("/products/details/{id}")] + public async Task Get(string id) + { + var url = $"/api/shipping-options/product/{id}"; + var response = await client.GetAsync(url); + + dynamic productShippingOptions = await response.Content.AsExpando(); + + var options = ((IEnumerable)productShippingOptions.Options) + .Select(o => o.Option) + .ToArray(); + + var vm = httpContextAccessor.HttpContext.Request.GetComposedResponseModel(); + vm.ProductShippingOptions = string.Join(", ", options); + } +} \ No newline at end of file diff --git a/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/ProductDetailsGetHandler.cs b/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/ProductDetailsGetHandler.cs deleted file mode 100644 index 5462b0a8..00000000 --- a/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/ProductDetailsGetHandler.cs +++ /dev/null @@ -1,40 +0,0 @@ -using Microsoft.AspNetCore.Http; -using Microsoft.AspNetCore.Routing; -using ServiceComposer.AspNetCore; -using JsonUtils; -using System.Collections.Generic; -using System.Linq; -using System.Net.Http; -using System.Threading.Tasks; -using Microsoft.AspNetCore.Mvc; - -namespace Shipping.ViewModelComposition -{ - class ProductDetailsGetHandler : ICompositionRequestsHandler - { - private readonly HttpClient _client; - - public ProductDetailsGetHandler(HttpClient client) - { - _client = client; - } - - [HttpGet("/products/details/{id}")] - public async Task Handle(HttpRequest request) - { - var id = (string)request.HttpContext.GetRouteData().Values["id"]; - - var url = $"/api/shipping-options/product/{id}"; - var response = await _client.GetAsync(url); - - dynamic productShippingOptions = await response.Content.AsExpando(); - - var options = ((IEnumerable)productShippingOptions.Options) - .Select(o => o.Option) - .ToArray(); - - var vm = request.GetComposedResponseModel(); - vm.ProductShippingOptions = string.Join(", ", options); - } - } -} diff --git a/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/ViewModelCompositionOptionsCustomization.cs b/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/ViewModelCompositionOptionsCustomization.cs index 94e6bedc..457b4735 100644 --- a/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/ViewModelCompositionOptionsCustomization.cs +++ b/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/ViewModelCompositionOptionsCustomization.cs @@ -3,6 +3,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using ServiceComposer.AspNetCore; +using Shipping.ViewModelComposition.CompositionHandlers; namespace Shipping.ViewModelComposition { @@ -10,7 +11,7 @@ public class ViewModelCompositionOptionsCustomization : IViewModelCompositionOpt { public void Customize(ViewModelCompositionOptions options) { - options.RegisterHttpClient((serviceProvider, httpClient) => + options.RegisterHttpClient((serviceProvider, httpClient) => { var configuration = serviceProvider.GetService(); var baseAddress = configuration?.GetSection("Shipping:BaseAddress").Value ?? "http://localhost:5004"; From 165ee49676e8a79cbb96c29c2f076f41b785df17 Mon Sep 17 00:00:00 2001 From: Mauro Servienti Date: Thu, 26 Jun 2025 10:34:46 +0200 Subject: [PATCH 3/7] try to make CI happy --- .../Composition.Tests/When_calling_composition_gateway.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs b/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs index 2c13705b..b42c9071 100644 --- a/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs +++ b/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs @@ -80,9 +80,9 @@ HttpClient ClientProvider(string name) => Assert.Equal("Banana Holder", composedViewModel.ProductName); Assert.Equal("Outdoor travel cute banana protector storage box", composedViewModel.ProductDescription); Assert.Equal(10, composedViewModel.ProductPrice); - Assert.Equal(4, composedViewModel.ProductInventory); Assert.Equal(false, composedViewModel.ProductOutOfStock); Assert.Equal("Express Delivery, Regular mail", composedViewModel.ProductShippingOptions); + Assert.Equal(4, composedViewModel.ProductInventory); } } } \ No newline at end of file From 943a13564faf3569877d89a1e41c2866fe646ebf Mon Sep 17 00:00:00 2001 From: Mauro Servienti Date: Thu, 26 Jun 2025 10:36:36 +0200 Subject: [PATCH 4/7] again --- .../Composition.Tests/When_calling_composition_gateway.cs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs b/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs index b42c9071..8021deb6 100644 --- a/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs +++ b/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs @@ -80,8 +80,9 @@ HttpClient ClientProvider(string name) => Assert.Equal("Banana Holder", composedViewModel.ProductName); Assert.Equal("Outdoor travel cute banana protector storage box", composedViewModel.ProductDescription); Assert.Equal(10, composedViewModel.ProductPrice); - Assert.Equal(false, composedViewModel.ProductOutOfStock); + Assert.Equal("Express Delivery, Regular mail", composedViewModel.ProductShippingOptions); + Assert.Equal(false, composedViewModel.ProductOutOfStock); Assert.Equal(4, composedViewModel.ProductInventory); } } From f8c8cd4961b7beb6977cb40d1e1c288332a6f5b6 Mon Sep 17 00:00:00 2001 From: Mauro Servienti Date: Thu, 26 Jun 2025 19:01:48 +0200 Subject: [PATCH 5/7] Use beta.2 built against .NET 8 Microsoft.CodeAnalysis.CSharp 4.11.0 --- .../Catalog.ViewModelComposition.csproj | 2 +- .../Composition.Tests/When_calling_composition_gateway.cs | 1 + .../CompositionGateway/CompositionGateway.csproj | 2 +- .../ConfigurationUtils/ConfigurationUtils.csproj | 2 +- .../Sales.ViewModelComposition.csproj | 2 +- .../Shipping.ViewModelComposition.csproj | 2 +- .../Warehouse.ViewModelComposition.csproj | 2 +- 7 files changed, 7 insertions(+), 6 deletions(-) diff --git a/ASP.Net Core API Gateway - 01/Catalog.ViewModelComposition/Catalog.ViewModelComposition.csproj b/ASP.Net Core API Gateway - 01/Catalog.ViewModelComposition/Catalog.ViewModelComposition.csproj index ff64d19d..793acc7f 100644 --- a/ASP.Net Core API Gateway - 01/Catalog.ViewModelComposition/Catalog.ViewModelComposition.csproj +++ b/ASP.Net Core API Gateway - 01/Catalog.ViewModelComposition/Catalog.ViewModelComposition.csproj @@ -6,7 +6,7 @@ - + diff --git a/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs b/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs index 8021deb6..1b9bc2fc 100644 --- a/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs +++ b/ASP.Net Core API Gateway - 01/Composition.Tests/When_calling_composition_gateway.cs @@ -72,6 +72,7 @@ HttpClient ClientProvider(string name) => // Act var composedResponse = await compositionClient.GetAsync("/products/details/1"); + var stringContent = await composedResponse.Content.ReadAsStringAsync(); dynamic composedViewModel = await composedResponse.Content.AsExpando(); // Assert diff --git a/ASP.Net Core API Gateway - 01/CompositionGateway/CompositionGateway.csproj b/ASP.Net Core API Gateway - 01/CompositionGateway/CompositionGateway.csproj index 4e84525e..489a0aa6 100644 --- a/ASP.Net Core API Gateway - 01/CompositionGateway/CompositionGateway.csproj +++ b/ASP.Net Core API Gateway - 01/CompositionGateway/CompositionGateway.csproj @@ -4,7 +4,7 @@ net8.0 - + diff --git a/ASP.Net Core API Gateway - 01/ConfigurationUtils/ConfigurationUtils.csproj b/ASP.Net Core API Gateway - 01/ConfigurationUtils/ConfigurationUtils.csproj index 1b3ba190..a09a1325 100644 --- a/ASP.Net Core API Gateway - 01/ConfigurationUtils/ConfigurationUtils.csproj +++ b/ASP.Net Core API Gateway - 01/ConfigurationUtils/ConfigurationUtils.csproj @@ -5,7 +5,7 @@ - + diff --git a/ASP.Net Core API Gateway - 01/Sales.ViewModelComposition/Sales.ViewModelComposition.csproj b/ASP.Net Core API Gateway - 01/Sales.ViewModelComposition/Sales.ViewModelComposition.csproj index ff64d19d..793acc7f 100644 --- a/ASP.Net Core API Gateway - 01/Sales.ViewModelComposition/Sales.ViewModelComposition.csproj +++ b/ASP.Net Core API Gateway - 01/Sales.ViewModelComposition/Sales.ViewModelComposition.csproj @@ -6,7 +6,7 @@ - + diff --git a/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/Shipping.ViewModelComposition.csproj b/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/Shipping.ViewModelComposition.csproj index 11d8a4df..77b2d4e2 100644 --- a/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/Shipping.ViewModelComposition.csproj +++ b/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/Shipping.ViewModelComposition.csproj @@ -6,7 +6,7 @@ - + diff --git a/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/Warehouse.ViewModelComposition.csproj b/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/Warehouse.ViewModelComposition.csproj index ff64d19d..793acc7f 100644 --- a/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/Warehouse.ViewModelComposition.csproj +++ b/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/Warehouse.ViewModelComposition.csproj @@ -6,7 +6,7 @@ - + From c8ffcf222a6752f60047a9a2c04f357dabbcac42 Mon Sep 17 00:00:00 2001 From: Mauro Servienti Date: Wed, 2 Jul 2025 10:32:33 +0200 Subject: [PATCH 6/7] Add support for local packages --- ASP.Net Core API Gateway - 01/nuget.config | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ASP.Net Core API Gateway - 01/nuget.config b/ASP.Net Core API Gateway - 01/nuget.config index 319bc405..c6e68375 100644 --- a/ASP.Net Core API Gateway - 01/nuget.config +++ b/ASP.Net Core API Gateway - 01/nuget.config @@ -15,5 +15,8 @@ + + + \ No newline at end of file From cdfd5091e17025cc38a1c702fa24bd6c7591fbef Mon Sep 17 00:00:00 2001 From: Mauro Servienti Date: Wed, 2 Jul 2025 10:33:06 +0200 Subject: [PATCH 7/7] Update to latest ServiceComposer beta --- .../Catalog.ViewModelComposition.csproj | 2 +- .../CompositionGateway/CompositionGateway.csproj | 2 +- .../ConfigurationUtils/ConfigurationUtils.csproj | 2 +- .../Sales.ViewModelComposition.csproj | 2 +- .../Shipping.ViewModelComposition.csproj | 2 +- .../Warehouse.ViewModelComposition.csproj | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/ASP.Net Core API Gateway - 01/Catalog.ViewModelComposition/Catalog.ViewModelComposition.csproj b/ASP.Net Core API Gateway - 01/Catalog.ViewModelComposition/Catalog.ViewModelComposition.csproj index 793acc7f..f42773a4 100644 --- a/ASP.Net Core API Gateway - 01/Catalog.ViewModelComposition/Catalog.ViewModelComposition.csproj +++ b/ASP.Net Core API Gateway - 01/Catalog.ViewModelComposition/Catalog.ViewModelComposition.csproj @@ -6,7 +6,7 @@ - + diff --git a/ASP.Net Core API Gateway - 01/CompositionGateway/CompositionGateway.csproj b/ASP.Net Core API Gateway - 01/CompositionGateway/CompositionGateway.csproj index 489a0aa6..d3487a62 100644 --- a/ASP.Net Core API Gateway - 01/CompositionGateway/CompositionGateway.csproj +++ b/ASP.Net Core API Gateway - 01/CompositionGateway/CompositionGateway.csproj @@ -4,7 +4,7 @@ net8.0 - + diff --git a/ASP.Net Core API Gateway - 01/ConfigurationUtils/ConfigurationUtils.csproj b/ASP.Net Core API Gateway - 01/ConfigurationUtils/ConfigurationUtils.csproj index a09a1325..17c4f55f 100644 --- a/ASP.Net Core API Gateway - 01/ConfigurationUtils/ConfigurationUtils.csproj +++ b/ASP.Net Core API Gateway - 01/ConfigurationUtils/ConfigurationUtils.csproj @@ -5,7 +5,7 @@ - + diff --git a/ASP.Net Core API Gateway - 01/Sales.ViewModelComposition/Sales.ViewModelComposition.csproj b/ASP.Net Core API Gateway - 01/Sales.ViewModelComposition/Sales.ViewModelComposition.csproj index 793acc7f..f42773a4 100644 --- a/ASP.Net Core API Gateway - 01/Sales.ViewModelComposition/Sales.ViewModelComposition.csproj +++ b/ASP.Net Core API Gateway - 01/Sales.ViewModelComposition/Sales.ViewModelComposition.csproj @@ -6,7 +6,7 @@ - + diff --git a/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/Shipping.ViewModelComposition.csproj b/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/Shipping.ViewModelComposition.csproj index 77b2d4e2..daa19355 100644 --- a/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/Shipping.ViewModelComposition.csproj +++ b/ASP.Net Core API Gateway - 01/Shipping.ViewModelComposition/Shipping.ViewModelComposition.csproj @@ -6,7 +6,7 @@ - + diff --git a/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/Warehouse.ViewModelComposition.csproj b/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/Warehouse.ViewModelComposition.csproj index 793acc7f..f42773a4 100644 --- a/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/Warehouse.ViewModelComposition.csproj +++ b/ASP.Net Core API Gateway - 01/Warehouse.ViewModelComposition/Warehouse.ViewModelComposition.csproj @@ -6,7 +6,7 @@ - +