(options =>
+ {
+ //Configure authorization.
+ });
+ }
+ }
+}
diff --git a/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/EasyAbp.EShop.Web.csproj b/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/EasyAbp.EShop.Web.csproj
new file mode 100644
index 00000000..71399417
--- /dev/null
+++ b/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/EasyAbp.EShop.Web.csproj
@@ -0,0 +1,47 @@
+
+
+
+
+
+ netcoreapp3.1
+ $(AssetTargetFallback);portable-net45+win8+wp8+wpa81;
+ true
+ Library
+ EasyAbp.EShop.Web
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/FodyWeavers.xml b/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/FodyWeavers.xml
new file mode 100644
index 00000000..be0de3a9
--- /dev/null
+++ b/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/FodyWeavers.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/FodyWeavers.xsd b/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/FodyWeavers.xsd
new file mode 100644
index 00000000..3f3946e2
--- /dev/null
+++ b/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/FodyWeavers.xsd
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.
+
+
+
+
+ A comma-separated list of error codes that can be safely ignored in assembly verification.
+
+
+
+
+ 'false' to turn off automatic generation of the XML Schema file.
+
+
+
+
+
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/Pages/EShop/Index.cshtml b/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/Pages/EShop/Index.cshtml
new file mode 100644
index 00000000..0f183876
--- /dev/null
+++ b/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/Pages/EShop/Index.cshtml
@@ -0,0 +1,7 @@
+@page
+@inherits EasyAbp.EShop.Web.Pages.EShopPage
+@model EasyAbp.EShop.Web.Pages.EShop.IndexModel
+@{
+}
+EShop
+A sample page for the EShop module.
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/Pages/EShop/Index.cshtml.cs b/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/Pages/EShop/Index.cshtml.cs
new file mode 100644
index 00000000..cc81fd74
--- /dev/null
+++ b/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/Pages/EShop/Index.cshtml.cs
@@ -0,0 +1,9 @@
+namespace EasyAbp.EShop.Web.Pages.EShop
+{
+ public class IndexModel : EShopPageModel
+ {
+ public void OnGet()
+ {
+ }
+ }
+}
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/Pages/EShop/_ViewImports.cshtml b/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/Pages/EShop/_ViewImports.cshtml
new file mode 100644
index 00000000..c1da1f5f
--- /dev/null
+++ b/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/Pages/EShop/_ViewImports.cshtml
@@ -0,0 +1,4 @@
+@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
+@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI
+@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bootstrap
+@addTagHelper *, Volo.Abp.AspNetCore.Mvc.UI.Bundling
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/Pages/EShopPage.cs b/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/Pages/EShopPage.cs
new file mode 100644
index 00000000..d6c1d550
--- /dev/null
+++ b/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/Pages/EShopPage.cs
@@ -0,0 +1,16 @@
+using Microsoft.AspNetCore.Mvc.Localization;
+using Microsoft.AspNetCore.Mvc.Razor.Internal;
+using EasyAbp.EShop.Localization;
+using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
+
+namespace EasyAbp.EShop.Web.Pages
+{
+ /* Inherit your UI Pages from this class. To do that, add this line to your Pages (.cshtml files under the Page folder):
+ * @inherits EasyAbp.EShop.Web.Pages.EShopPage
+ */
+ public abstract class EShopPage : AbpPage
+ {
+ [RazorInject]
+ public IHtmlLocalizer L { get; set; }
+ }
+}
diff --git a/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/Pages/EShopPageModel.cs b/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/Pages/EShopPageModel.cs
new file mode 100644
index 00000000..299864b4
--- /dev/null
+++ b/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/Pages/EShopPageModel.cs
@@ -0,0 +1,16 @@
+using EasyAbp.EShop.Localization;
+using Volo.Abp.AspNetCore.Mvc.UI.RazorPages;
+
+namespace EasyAbp.EShop.Web.Pages
+{
+ /* Inherit your PageModel classes from this class.
+ */
+ public abstract class EShopPageModel : AbpPageModel
+ {
+ protected EShopPageModel()
+ {
+ LocalizationResourceType = typeof(EShopResource);
+ ObjectMapperContext = typeof(EShopWebModule);
+ }
+ }
+}
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/Properties/launchSettings.json b/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/Properties/launchSettings.json
new file mode 100644
index 00000000..229b3060
--- /dev/null
+++ b/integration/EasyAbp.EShop/src/EasyAbp.EShop.Web/Properties/launchSettings.json
@@ -0,0 +1,27 @@
+{
+ "iisSettings": {
+ "windowsAuthentication": false,
+ "anonymousAuthentication": true,
+ "iisExpress": {
+ "applicationUrl": "http://localhost:56993/",
+ "sslPort": 0
+ }
+ },
+ "profiles": {
+ "IIS Express": {
+ "commandName": "IISExpress",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ }
+ },
+ "EasyAbp.EShop.Web": {
+ "commandName": "Project",
+ "launchBrowser": true,
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "applicationUrl": "http://localhost:56994/"
+ }
+ }
+}
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.Application.Tests/EShopApplicationTestBase.cs b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Application.Tests/EShopApplicationTestBase.cs
new file mode 100644
index 00000000..de34584d
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Application.Tests/EShopApplicationTestBase.cs
@@ -0,0 +1,10 @@
+namespace EasyAbp.EShop
+{
+ /* Inherit from this class for your application layer tests.
+ * See SampleAppService_Tests for example.
+ */
+ public abstract class EShopApplicationTestBase : EShopTestBase
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.Application.Tests/EShopApplicationTestModule.cs b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Application.Tests/EShopApplicationTestModule.cs
new file mode 100644
index 00000000..751feee7
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Application.Tests/EShopApplicationTestModule.cs
@@ -0,0 +1,13 @@
+using Volo.Abp.Modularity;
+
+namespace EasyAbp.EShop
+{
+ [DependsOn(
+ typeof(EShopApplicationModule),
+ typeof(EShopDomainTestModule)
+ )]
+ public class EShopApplicationTestModule : AbpModule
+ {
+
+ }
+}
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.Application.Tests/EasyAbp.EShop.Application.Tests.csproj b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Application.Tests/EasyAbp.EShop.Application.Tests.csproj
new file mode 100644
index 00000000..92c305f7
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Application.Tests/EasyAbp.EShop.Application.Tests.csproj
@@ -0,0 +1,16 @@
+
+
+
+
+
+ netcoreapp3.1
+
+
+
+
+
+
+
+
+
+
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.Application.Tests/FodyWeavers.xml b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Application.Tests/FodyWeavers.xml
new file mode 100644
index 00000000..be0de3a9
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Application.Tests/FodyWeavers.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.Application.Tests/FodyWeavers.xsd b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Application.Tests/FodyWeavers.xsd
new file mode 100644
index 00000000..3f3946e2
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Application.Tests/FodyWeavers.xsd
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.
+
+
+
+
+ A comma-separated list of error codes that can be safely ignored in assembly verification.
+
+
+
+
+ 'false' to turn off automatic generation of the XML Schema file.
+
+
+
+
+
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.Domain.Tests/EShopDomainTestBase.cs b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Domain.Tests/EShopDomainTestBase.cs
new file mode 100644
index 00000000..288b75c8
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Domain.Tests/EShopDomainTestBase.cs
@@ -0,0 +1,10 @@
+namespace EasyAbp.EShop
+{
+ /* Inherit from this class for your domain layer tests.
+ * See SampleManager_Tests for example.
+ */
+ public abstract class EShopDomainTestBase : EShopTestBase
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.Domain.Tests/EShopDomainTestModule.cs b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Domain.Tests/EShopDomainTestModule.cs
new file mode 100644
index 00000000..e39f7d09
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Domain.Tests/EShopDomainTestModule.cs
@@ -0,0 +1,17 @@
+using EasyAbp.EShop.EntityFrameworkCore;
+using Volo.Abp.Modularity;
+
+namespace EasyAbp.EShop
+{
+ /* Domain tests are configured to use the EF Core provider.
+ * You can switch to MongoDB, however your domain tests should be
+ * database independent anyway.
+ */
+ [DependsOn(
+ typeof(EShopEntityFrameworkCoreTestModule)
+ )]
+ public class EShopDomainTestModule : AbpModule
+ {
+
+ }
+}
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.Domain.Tests/EasyAbp.EShop.Domain.Tests.csproj b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Domain.Tests/EasyAbp.EShop.Domain.Tests.csproj
new file mode 100644
index 00000000..1987d539
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Domain.Tests/EasyAbp.EShop.Domain.Tests.csproj
@@ -0,0 +1,15 @@
+
+
+
+
+
+ netcoreapp3.1
+
+
+
+
+
+
+
+
+
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.Domain.Tests/FodyWeavers.xml b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Domain.Tests/FodyWeavers.xml
new file mode 100644
index 00000000..be0de3a9
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Domain.Tests/FodyWeavers.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.Domain.Tests/FodyWeavers.xsd b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Domain.Tests/FodyWeavers.xsd
new file mode 100644
index 00000000..3f3946e2
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.Domain.Tests/FodyWeavers.xsd
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.
+
+
+
+
+ A comma-separated list of error codes that can be safely ignored in assembly verification.
+
+
+
+
+ 'false' to turn off automatic generation of the XML Schema file.
+
+
+
+
+
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.EntityFrameworkCore.Tests/EasyAbp.EShop.EntityFrameworkCore.Tests.csproj b/integration/EasyAbp.EShop/test/EasyAbp.EShop.EntityFrameworkCore.Tests/EasyAbp.EShop.EntityFrameworkCore.Tests.csproj
new file mode 100644
index 00000000..a80709bb
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.EntityFrameworkCore.Tests/EasyAbp.EShop.EntityFrameworkCore.Tests.csproj
@@ -0,0 +1,19 @@
+
+
+
+
+
+ netcoreapp3.1
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.EntityFrameworkCore.Tests/EntityFrameworkCore/EShopEntityFrameworkCoreTestBase.cs b/integration/EasyAbp.EShop/test/EasyAbp.EShop.EntityFrameworkCore.Tests/EntityFrameworkCore/EShopEntityFrameworkCoreTestBase.cs
new file mode 100644
index 00000000..1a8eefdd
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.EntityFrameworkCore.Tests/EntityFrameworkCore/EShopEntityFrameworkCoreTestBase.cs
@@ -0,0 +1,10 @@
+namespace EasyAbp.EShop.EntityFrameworkCore
+{
+ /* This class can be used as a base class for EF Core integration tests,
+ * while SampleRepository_Tests uses a different approach.
+ */
+ public abstract class EShopEntityFrameworkCoreTestBase : EShopTestBase
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.EntityFrameworkCore.Tests/EntityFrameworkCore/EShopEntityFrameworkCoreTestModule.cs b/integration/EasyAbp.EShop/test/EasyAbp.EShop.EntityFrameworkCore.Tests/EntityFrameworkCore/EShopEntityFrameworkCoreTestModule.cs
new file mode 100644
index 00000000..9b851b97
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.EntityFrameworkCore.Tests/EntityFrameworkCore/EShopEntityFrameworkCoreTestModule.cs
@@ -0,0 +1,41 @@
+using Microsoft.Data.Sqlite;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Storage;
+using Volo.Abp.EntityFrameworkCore;
+using Volo.Abp.Modularity;
+
+namespace EasyAbp.EShop.EntityFrameworkCore
+{
+ [DependsOn(
+ typeof(EShopTestBaseModule),
+ typeof(EShopEntityFrameworkCoreModule)
+ )]
+ public class EShopEntityFrameworkCoreTestModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ var sqliteConnection = CreateDatabaseAndGetConnection();
+
+ Configure(options =>
+ {
+ options.Configure(abpDbContextConfigurationContext =>
+ {
+ abpDbContextConfigurationContext.DbContextOptions.UseSqlite(sqliteConnection);
+ });
+ });
+ }
+
+ private static SqliteConnection CreateDatabaseAndGetConnection()
+ {
+ var connection = new SqliteConnection("Data Source=:memory:");
+ connection.Open();
+
+ new EShopDbContext(
+ new DbContextOptionsBuilder().UseSqlite(connection).Options
+ ).GetService().CreateTables();
+
+ return connection;
+ }
+ }
+}
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.EntityFrameworkCore.Tests/FodyWeavers.xml b/integration/EasyAbp.EShop/test/EasyAbp.EShop.EntityFrameworkCore.Tests/FodyWeavers.xml
new file mode 100644
index 00000000..be0de3a9
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.EntityFrameworkCore.Tests/FodyWeavers.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.EntityFrameworkCore.Tests/FodyWeavers.xsd b/integration/EasyAbp.EShop/test/EasyAbp.EShop.EntityFrameworkCore.Tests/FodyWeavers.xsd
new file mode 100644
index 00000000..3f3946e2
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.EntityFrameworkCore.Tests/FodyWeavers.xsd
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.
+
+
+
+
+ A comma-separated list of error codes that can be safely ignored in assembly verification.
+
+
+
+
+ 'false' to turn off automatic generation of the XML Schema file.
+
+
+
+
+
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp/ClientDemoService.cs b/integration/EasyAbp.EShop/test/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp/ClientDemoService.cs
new file mode 100644
index 00000000..c6a00a2a
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp/ClientDemoService.cs
@@ -0,0 +1,146 @@
+using System;
+using System.Net.Http;
+using System.Threading.Tasks;
+using IdentityModel.Client;
+using Microsoft.Extensions.Configuration;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.IdentityModel;
+
+namespace EasyAbp.EShop
+{
+ public class ClientDemoService : ITransientDependency
+ {
+ private readonly IIdentityModelAuthenticationService _authenticationService;
+ private readonly IConfiguration _configuration;
+
+ public ClientDemoService(
+ IIdentityModelAuthenticationService authenticationService,
+ IConfiguration configuration)
+ {
+ _authenticationService = authenticationService;
+ _configuration = configuration;
+ }
+
+ public async Task RunAsync()
+ {
+ await TestWithDynamicProxiesAsync();
+ await TestWithHttpClientAndIdentityModelAuthenticationServiceAsync();
+ await TestAllManuallyAsync();
+ }
+
+ /* Shows how to perform an HTTP request to the API using ABP's dynamic c# proxy
+ * feature. It is just simple as calling a local service method.
+ * Authorization and HTTP request details are handled by the ABP framework.
+ */
+ private async Task TestWithDynamicProxiesAsync()
+ {
+ Console.WriteLine();
+ Console.WriteLine($"***** {nameof(TestWithDynamicProxiesAsync)} *****");
+ }
+
+ /* Shows how to use HttpClient to perform a request to the HTTP API.
+ * It uses ABP's IIdentityModelAuthenticationService to simplify obtaining access tokens.
+ */
+ private async Task TestWithHttpClientAndIdentityModelAuthenticationServiceAsync()
+ {
+ Console.WriteLine();
+ Console.WriteLine($"***** {nameof(TestWithHttpClientAndIdentityModelAuthenticationServiceAsync)} *****");
+
+ //Get access token using ABP's IIdentityModelAuthenticationService
+
+ var accessToken = await _authenticationService.GetAccessTokenAsync(
+ new IdentityClientConfiguration(
+ _configuration["IdentityClients:Default:Authority"],
+ _configuration["IdentityClients:Default:Scope"],
+ _configuration["IdentityClients:Default:ClientId"],
+ _configuration["IdentityClients:Default:ClientSecret"],
+ _configuration["IdentityClients:Default:GrantType"],
+ _configuration["IdentityClients:Default:UserName"],
+ _configuration["IdentityClients:Default:UserPassword"]
+ )
+ );
+
+ //Perform the actual HTTP request
+
+ using (var httpClient = new HttpClient())
+ {
+ httpClient.SetBearerToken(accessToken);
+
+ var url = _configuration["RemoteServices:EShop:BaseUrl"] +
+ "api/EShop/sample/authorized";
+
+ var responseMessage = await httpClient.GetAsync(url);
+ if (responseMessage.IsSuccessStatusCode)
+ {
+ var responseString = await responseMessage.Content.ReadAsStringAsync();
+ Console.WriteLine("Result: " + responseString);
+ }
+ else
+ {
+ throw new Exception("Remote server returns error code: " + responseMessage.StatusCode);
+ }
+ }
+ }
+
+ /* Shows how to use HttpClient to perform a request to the HTTP API.
+ * It obtains access token using IdentityServer's API. See its documentation:
+ * https://identityserver4.readthedocs.io/en/latest/quickstarts/2_resource_owner_passwords.html
+ */
+ private async Task TestAllManuallyAsync()
+ {
+ Console.WriteLine();
+ Console.WriteLine($"***** {nameof(TestAllManuallyAsync)} *****");
+
+ //Obtain access token from the IDS4 server
+
+ // discover endpoints from metadata
+ var client = new HttpClient();
+ var disco = await client.GetDiscoveryDocumentAsync(_configuration["IdentityClients:Default:Authority"]);
+ if (disco.IsError)
+ {
+ Console.WriteLine(disco.Error);
+ return;
+ }
+
+ // request token
+ var tokenResponse = await client.RequestPasswordTokenAsync(new PasswordTokenRequest
+ {
+ Address = disco.TokenEndpoint,
+ ClientId = _configuration["IdentityClients:Default:ClientId"],
+ ClientSecret = _configuration["IdentityClients:Default:ClientSecret"],
+ UserName = _configuration["IdentityClients:Default:UserName"],
+ Password = _configuration["IdentityClients:Default:UserPassword"],
+ Scope = _configuration["IdentityClients:Default:Scope"]
+ });
+
+ if (tokenResponse.IsError)
+ {
+ Console.WriteLine(tokenResponse.Error);
+ return;
+ }
+
+ Console.WriteLine(tokenResponse.Json);
+
+ //Perform the actual HTTP request
+
+ using (var httpClient = new HttpClient())
+ {
+ httpClient.SetBearerToken(tokenResponse.AccessToken);
+
+ var url = _configuration["RemoteServices:EShop:BaseUrl"] +
+ "api/EShop/sample/authorized";
+
+ var responseMessage = await httpClient.GetAsync(url);
+ if (responseMessage.IsSuccessStatusCode)
+ {
+ var responseString = await responseMessage.Content.ReadAsStringAsync();
+ Console.WriteLine("Result: " + responseString);
+ }
+ else
+ {
+ throw new Exception("Remote server returns error code: " + responseMessage.StatusCode);
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs b/integration/EasyAbp.EShop/test/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs
new file mode 100644
index 00000000..4e1fbee7
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp/ConsoleTestAppHostedService.cs
@@ -0,0 +1,26 @@
+using Microsoft.Extensions.Hosting;
+using System.Threading;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp;
+
+namespace EasyAbp.EShop.HttpApi.Client.ConsoleTestApp
+{
+ public class ConsoleTestAppHostedService : IHostedService
+ {
+ public async Task StartAsync(CancellationToken cancellationToken)
+ {
+ using (var application = AbpApplicationFactory.Create())
+ {
+ application.Initialize();
+
+ var demo = application.ServiceProvider.GetRequiredService();
+ await demo.RunAsync();
+
+ application.Shutdown();
+ }
+ }
+
+ public Task StopAsync(CancellationToken cancellationToken) => Task.CompletedTask;
+ }
+}
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp/EShopConsoleApiClientModule.cs b/integration/EasyAbp.EShop/test/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp/EShopConsoleApiClientModule.cs
new file mode 100644
index 00000000..8c91e48f
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp/EShopConsoleApiClientModule.cs
@@ -0,0 +1,14 @@
+using Volo.Abp.Http.Client.IdentityModel;
+using Volo.Abp.Modularity;
+
+namespace EasyAbp.EShop
+{
+ [DependsOn(
+ typeof(EShopHttpApiClientModule),
+ typeof(AbpHttpClientIdentityModelModule)
+ )]
+ public class EShopConsoleApiClientModule : AbpModule
+ {
+
+ }
+}
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp.csproj b/integration/EasyAbp.EShop/test/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp.csproj
new file mode 100644
index 00000000..ae81ad8c
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp.csproj
@@ -0,0 +1,26 @@
+
+
+
+ Exe
+ netcoreapp3.1
+
+
+
+
+
+
+
+
+
+
+
+ PreserveNewest
+ Always
+
+
+
+
+
+
+
+
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp/Program.cs b/integration/EasyAbp.EShop/test/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp/Program.cs
new file mode 100644
index 00000000..4f8126c1
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp/Program.cs
@@ -0,0 +1,21 @@
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.Hosting;
+
+namespace EasyAbp.EShop.HttpApi.Client.ConsoleTestApp
+{
+ class Program
+ {
+ static async Task Main(string[] args)
+ {
+ await CreateHostBuilder(args).RunConsoleAsync();
+ }
+
+ public static IHostBuilder CreateHostBuilder(string[] args) =>
+ Host.CreateDefaultBuilder(args)
+ .ConfigureServices((hostContext, services) =>
+ {
+ services.AddHostedService();
+ });
+ }
+}
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp/appsettings.json b/integration/EasyAbp.EShop/test/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp/appsettings.json
new file mode 100644
index 00000000..85db7a2c
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.HttpApi.Client.ConsoleTestApp/appsettings.json
@@ -0,0 +1,21 @@
+{
+ "RemoteServices": {
+ "Default": {
+ "BaseUrl": "https://localhost:44317/"
+ },
+ "EShop": {
+ "BaseUrl": "https://localhost:44365/"
+ }
+ },
+ "IdentityClients": {
+ "Default": {
+ "GrantType": "password",
+ "ClientId": "EShop_ConsoleTestApp",
+ "ClientSecret": "1q2w3e*",
+ "UserName": "admin",
+ "UserPassword": "1q2w3E*",
+ "Authority": "https://localhost:44317/",
+ "Scope": "EShop"
+ }
+ }
+}
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/EasyAbp.EShop.MongoDB.Tests.csproj b/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/EasyAbp.EShop.MongoDB.Tests.csproj
new file mode 100644
index 00000000..167b9956
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/EasyAbp.EShop.MongoDB.Tests.csproj
@@ -0,0 +1,17 @@
+
+
+
+
+
+ netcoreapp3.1
+
+
+
+
+
+
+
+
+
+
+
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/FodyWeavers.xml b/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/FodyWeavers.xml
new file mode 100644
index 00000000..be0de3a9
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/FodyWeavers.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/FodyWeavers.xsd b/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/FodyWeavers.xsd
new file mode 100644
index 00000000..3f3946e2
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/FodyWeavers.xsd
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.
+
+
+
+
+ A comma-separated list of error codes that can be safely ignored in assembly verification.
+
+
+
+
+ 'false' to turn off automatic generation of the XML Schema file.
+
+
+
+
+
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/MongoDB/EShopMongoDbTestBase.cs b/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/MongoDB/EShopMongoDbTestBase.cs
new file mode 100644
index 00000000..79defdf1
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/MongoDB/EShopMongoDbTestBase.cs
@@ -0,0 +1,10 @@
+namespace EasyAbp.EShop.MongoDB
+{
+ /* This class can be used as a base class for MongoDB integration tests,
+ * while SampleRepository_Tests uses a different approach.
+ */
+ public abstract class EShopMongoDbTestBase : EShopTestBase
+ {
+
+ }
+}
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/MongoDB/EShopMongoDbTestModule.cs b/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/MongoDB/EShopMongoDbTestModule.cs
new file mode 100644
index 00000000..ba951989
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/MongoDB/EShopMongoDbTestModule.cs
@@ -0,0 +1,25 @@
+using System;
+using Volo.Abp.Data;
+using Volo.Abp.Modularity;
+
+namespace EasyAbp.EShop.MongoDB
+{
+ [DependsOn(
+ typeof(EShopTestBaseModule),
+ typeof(EShopMongoDbModule)
+ )]
+ public class EShopMongoDbTestModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ var connectionString = MongoDbFixture.ConnectionString.EnsureEndsWith('/') +
+ "Db_" +
+ Guid.NewGuid().ToString("N");
+
+ Configure(options =>
+ {
+ options.ConnectionStrings.Default = connectionString;
+ });
+ }
+ }
+}
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/MongoDB/MongoDbFixture.cs b/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/MongoDB/MongoDbFixture.cs
new file mode 100644
index 00000000..3e1693ac
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/MongoDB/MongoDbFixture.cs
@@ -0,0 +1,16 @@
+using System;
+using Mongo2Go;
+
+namespace EasyAbp.EShop.MongoDB
+{
+ public class MongoDbFixture : IDisposable
+ {
+ private static readonly MongoDbRunner MongoDbRunner = MongoDbRunner.Start();
+ public static readonly string ConnectionString = MongoDbRunner.ConnectionString;
+
+ public void Dispose()
+ {
+ MongoDbRunner?.Dispose();
+ }
+ }
+}
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/MongoDB/MongoTestCollection.cs b/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/MongoDB/MongoTestCollection.cs
new file mode 100644
index 00000000..7209acba
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.MongoDB.Tests/MongoDB/MongoTestCollection.cs
@@ -0,0 +1,10 @@
+using Xunit;
+
+namespace EasyAbp.EShop.MongoDB
+{
+ [CollectionDefinition(Name)]
+ public class MongoTestCollection : ICollectionFixture
+ {
+ public const string Name = "MongoDB Collection";
+ }
+}
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/EShopDataSeedContributor.cs b/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/EShopDataSeedContributor.cs
new file mode 100644
index 00000000..52216706
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/EShopDataSeedContributor.cs
@@ -0,0 +1,27 @@
+using System.Threading.Tasks;
+using Volo.Abp.Data;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Guids;
+
+namespace EasyAbp.EShop
+{
+ public class EShopDataSeedContributor : IDataSeedContributor, ITransientDependency
+ {
+ private readonly IGuidGenerator _guidGenerator;
+
+ public EShopDataSeedContributor(
+ IGuidGenerator guidGenerator)
+ {
+ _guidGenerator = guidGenerator;
+ }
+
+ public Task SeedAsync(DataSeedContext context)
+ {
+ /* Instead of returning the Task.CompletedTask, you can insert your test data
+ * at this point!
+ */
+
+ return Task.CompletedTask;
+ }
+ }
+}
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/EShopTestBase.cs b/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/EShopTestBase.cs
new file mode 100644
index 00000000..67f4ab12
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/EShopTestBase.cs
@@ -0,0 +1,60 @@
+using System;
+using System.Threading.Tasks;
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp;
+using Volo.Abp.Modularity;
+using Volo.Abp.Uow;
+using Volo.Abp.Testing;
+
+namespace EasyAbp.EShop
+{
+ /* All test classes are derived from this class, directly or indirectly. */
+ public abstract class EShopTestBase : AbpIntegratedTest
+ where TStartupModule : IAbpModule
+ {
+ protected override void SetAbpApplicationCreationOptions(AbpApplicationCreationOptions options)
+ {
+ options.UseAutofac();
+ }
+
+ protected virtual Task WithUnitOfWorkAsync(Func func)
+ {
+ return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func);
+ }
+
+ protected virtual async Task WithUnitOfWorkAsync(AbpUnitOfWorkOptions options, Func action)
+ {
+ using (var scope = ServiceProvider.CreateScope())
+ {
+ var uowManager = scope.ServiceProvider.GetRequiredService();
+
+ using (var uow = uowManager.Begin(options))
+ {
+ await action();
+
+ await uow.CompleteAsync();
+ }
+ }
+ }
+
+ protected virtual Task WithUnitOfWorkAsync(Func> func)
+ {
+ return WithUnitOfWorkAsync(new AbpUnitOfWorkOptions(), func);
+ }
+
+ protected virtual async Task WithUnitOfWorkAsync(AbpUnitOfWorkOptions options, Func> func)
+ {
+ using (var scope = ServiceProvider.CreateScope())
+ {
+ var uowManager = scope.ServiceProvider.GetRequiredService();
+
+ using (var uow = uowManager.Begin(options))
+ {
+ var result = await func();
+ await uow.CompleteAsync();
+ return result;
+ }
+ }
+ }
+ }
+}
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/EShopTestBaseModule.cs b/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/EShopTestBaseModule.cs
new file mode 100644
index 00000000..aa4963f9
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/EShopTestBaseModule.cs
@@ -0,0 +1,42 @@
+using Microsoft.Extensions.DependencyInjection;
+using Volo.Abp;
+using Volo.Abp.Authorization;
+using Volo.Abp.Autofac;
+using Volo.Abp.Data;
+using Volo.Abp.Modularity;
+using Volo.Abp.Threading;
+
+namespace EasyAbp.EShop
+{
+ [DependsOn(
+ typeof(AbpAutofacModule),
+ typeof(AbpTestBaseModule),
+ typeof(AbpAuthorizationModule),
+ typeof(EShopDomainModule)
+ )]
+ public class EShopTestBaseModule : AbpModule
+ {
+ public override void ConfigureServices(ServiceConfigurationContext context)
+ {
+ context.Services.AddAlwaysAllowAuthorization();
+ }
+
+ public override void OnApplicationInitialization(ApplicationInitializationContext context)
+ {
+ SeedTestData(context);
+ }
+
+ private static void SeedTestData(ApplicationInitializationContext context)
+ {
+ AsyncHelper.RunSync(async () =>
+ {
+ using (var scope = context.ServiceProvider.CreateScope())
+ {
+ await scope.ServiceProvider
+ .GetRequiredService()
+ .SeedAsync();
+ }
+ });
+ }
+ }
+}
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/EasyAbp.EShop.TestBase.csproj b/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/EasyAbp.EShop.TestBase.csproj
new file mode 100644
index 00000000..168c4fef
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/EasyAbp.EShop.TestBase.csproj
@@ -0,0 +1,23 @@
+
+
+
+
+
+ netcoreapp3.1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/FodyWeavers.xml b/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/FodyWeavers.xml
new file mode 100644
index 00000000..be0de3a9
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/FodyWeavers.xml
@@ -0,0 +1,3 @@
+
+
+
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/FodyWeavers.xsd b/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/FodyWeavers.xsd
new file mode 100644
index 00000000..3f3946e2
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/FodyWeavers.xsd
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed.
+
+
+
+
+ A comma-separated list of error codes that can be safely ignored in assembly verification.
+
+
+
+
+ 'false' to turn off automatic generation of the XML Schema file.
+
+
+
+
+
\ No newline at end of file
diff --git a/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/Security/FakeCurrentPrincipalAccessor.cs b/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/Security/FakeCurrentPrincipalAccessor.cs
new file mode 100644
index 00000000..adc772d8
--- /dev/null
+++ b/integration/EasyAbp.EShop/test/EasyAbp.EShop.TestBase/Security/FakeCurrentPrincipalAccessor.cs
@@ -0,0 +1,43 @@
+using System.Collections.Generic;
+using System.Security.Claims;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Security.Claims;
+
+namespace EasyAbp.EShop.Security
+{
+ [Dependency(ReplaceServices = true)]
+ public class FakeCurrentPrincipalAccessor : ThreadCurrentPrincipalAccessor
+ {
+ public override ClaimsPrincipal GetClaimsPrincipal()
+ {
+ return GetPrincipal();
+ }
+
+ private ClaimsPrincipal _principal;
+
+ private ClaimsPrincipal GetPrincipal()
+ {
+ if (_principal == null)
+ {
+ lock (this)
+ {
+ if (_principal == null)
+ {
+ _principal = new ClaimsPrincipal(
+ new ClaimsIdentity(
+ new List
+ {
+ new Claim(AbpClaimTypes.UserId,"2e701e62-0953-4dd3-910b-dc6cc93ccb0d"),
+ new Claim(AbpClaimTypes.UserName,"admin"),
+ new Claim(AbpClaimTypes.Email,"admin@abp.io")
+ }
+ )
+ );
+ }
+ }
+ }
+
+ return _principal;
+ }
+ }
+}
diff --git a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.EntityFrameworkCore/EasyAbp/EShop/Payments/EntityFrameworkCore/PaymentsDbContextModelCreatingExtensions.cs b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.EntityFrameworkCore/EasyAbp/EShop/Payments/EntityFrameworkCore/PaymentsDbContextModelCreatingExtensions.cs
index 2a3f7907..1bfda815 100644
--- a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.EntityFrameworkCore/EasyAbp/EShop/Payments/EntityFrameworkCore/PaymentsDbContextModelCreatingExtensions.cs
+++ b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.EntityFrameworkCore/EasyAbp/EShop/Payments/EntityFrameworkCore/PaymentsDbContextModelCreatingExtensions.cs
@@ -40,8 +40,6 @@ namespace EasyAbp.EShop.Payments.EntityFrameworkCore
});
*/
- // Configure dependent module
-
builder.ConfigurePaymentService();
}
}
diff --git a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.MongoDB/EasyAbp/EShop/Payments/MongoDB/PaymentsMongoDbContextExtensions.cs b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.MongoDB/EasyAbp/EShop/Payments/MongoDB/PaymentsMongoDbContextExtensions.cs
index 5e5daaef..481c2b6a 100644
--- a/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.MongoDB/EasyAbp/EShop/Payments/MongoDB/PaymentsMongoDbContextExtensions.cs
+++ b/modules/EasyAbp.EShop.Payments/src/EasyAbp.EShop.Payments.MongoDB/EasyAbp/EShop/Payments/MongoDB/PaymentsMongoDbContextExtensions.cs
@@ -1,4 +1,5 @@
using System;
+using EasyAbp.PaymentService.MongoDB;
using Volo.Abp;
using Volo.Abp.MongoDB;
@@ -17,6 +18,8 @@ namespace EasyAbp.EShop.Payments.MongoDB
);
optionsAction?.Invoke(options);
+
+ builder.ConfigurePaymentService();
}
}
}
\ No newline at end of file
diff --git a/samples/EasyMall/aspnet-core/EasyMall.sln b/samples/EasyMall/aspnet-core/EasyMall.sln
index b30c3529..568fdcd5 100644
--- a/samples/EasyMall/aspnet-core/EasyMall.sln
+++ b/samples/EasyMall/aspnet-core/EasyMall.sln
@@ -221,6 +221,44 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Stores.MongoD
EndProject
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Stores.TestBase", "..\..\..\modules\EasyAbp.EShop.Stores\test\EasyAbp.EShop.Stores.TestBase\EasyAbp.EShop.Stores.TestBase.csproj", "{F2A770E7-17A5-4009-9DE2-703940F34A3D}"
EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "integration", "integration", "{A8D42645-BAE3-4F2E-BC5B-889173CEC63C}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "EShop", "EShop", "{220D5B7C-FD10-46D8-82A1-FAE877DE59E6}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{4B0BD42D-BDE6-449F-8608-580399290ABE}"
+EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "test", "test", "{4995F694-3DE4-4678-BED4-3C5D8B5F0158}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Application", "..\..\..\integration\EasyAbp.EShop\src\EasyAbp.EShop.Application\EasyAbp.EShop.Application.csproj", "{8CC74F2A-573B-480F-9872-7C4597493B66}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Application.Contracts", "..\..\..\integration\EasyAbp.EShop\src\EasyAbp.EShop.Application.Contracts\EasyAbp.EShop.Application.Contracts.csproj", "{098387B9-B28F-4854-9323-2B9B67E523E2}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Domain", "..\..\..\integration\EasyAbp.EShop\src\EasyAbp.EShop.Domain\EasyAbp.EShop.Domain.csproj", "{187718A5-03C3-431A-A80D-5E0A64F86C05}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Domain.Shared", "..\..\..\integration\EasyAbp.EShop\src\EasyAbp.EShop.Domain.Shared\EasyAbp.EShop.Domain.Shared.csproj", "{26E75959-FA49-4328-9BB2-187E45F3F94D}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.EntityFrameworkCore", "..\..\..\integration\EasyAbp.EShop\src\EasyAbp.EShop.EntityFrameworkCore\EasyAbp.EShop.EntityFrameworkCore.csproj", "{5C279AA1-3F00-4FD4-8D61-65E6EC385B05}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.HttpApi", "..\..\..\integration\EasyAbp.EShop\src\EasyAbp.EShop.HttpApi\EasyAbp.EShop.HttpApi.csproj", "{D0B30993-0242-4FC0-A7DA-D8A78B194D13}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.HttpApi.Client", "..\..\..\integration\EasyAbp.EShop\src\EasyAbp.EShop.HttpApi.Client\EasyAbp.EShop.HttpApi.Client.csproj", "{E0A4BE17-935E-433A-B22A-C94394C59BA6}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.MongoDB", "..\..\..\integration\EasyAbp.EShop\src\EasyAbp.EShop.MongoDB\EasyAbp.EShop.MongoDB.csproj", "{9E08DF86-2BC4-4760-97A3-C873AC33295C}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Web", "..\..\..\integration\EasyAbp.EShop\src\EasyAbp.EShop.Web\EasyAbp.EShop.Web.csproj", "{0B7E609B-B842-424D-ABD2-EDFBDDFE7051}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Application.Tests", "..\..\..\integration\EasyAbp.EShop\test\EasyAbp.EShop.Application.Tests\EasyAbp.EShop.Application.Tests.csproj", "{F48A94E6-5EAF-4C48-8AA4-CFCA459E0D02}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.Domain.Tests", "..\..\..\integration\EasyAbp.EShop\test\EasyAbp.EShop.Domain.Tests\EasyAbp.EShop.Domain.Tests.csproj", "{74206FEF-72A6-4972-B810-C75282D01F37}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.EntityFrameworkCore.Tests", "..\..\..\integration\EasyAbp.EShop\test\EasyAbp.EShop.EntityFrameworkCore.Tests\EasyAbp.EShop.EntityFrameworkCore.Tests.csproj", "{6042A1F6-8A71-4B1A-B944-71E16179C971}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.HttpApi.Client.ConsoleTestApp", "..\..\..\integration\EasyAbp.EShop\test\EasyAbp.EShop.HttpApi.Client.ConsoleTestApp\EasyAbp.EShop.HttpApi.Client.ConsoleTestApp.csproj", "{6ADE7CAF-260E-4E71-B4FA-E96819A0F43A}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.MongoDB.Tests", "..\..\..\integration\EasyAbp.EShop\test\EasyAbp.EShop.MongoDB.Tests\EasyAbp.EShop.MongoDB.Tests.csproj", "{65B43722-08F5-4F0D-ADAE-E7C6768E59BC}"
+EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "EasyAbp.EShop.TestBase", "..\..\..\integration\EasyAbp.EShop\test\EasyAbp.EShop.TestBase\EasyAbp.EShop.TestBase.csproj", "{45B6591E-6517-4F57-9AFA-F28AF880B725}"
+EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
@@ -591,6 +629,66 @@ Global
{F2A770E7-17A5-4009-9DE2-703940F34A3D}.Debug|Any CPU.Build.0 = Debug|Any CPU
{F2A770E7-17A5-4009-9DE2-703940F34A3D}.Release|Any CPU.ActiveCfg = Release|Any CPU
{F2A770E7-17A5-4009-9DE2-703940F34A3D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {8CC74F2A-573B-480F-9872-7C4597493B66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {8CC74F2A-573B-480F-9872-7C4597493B66}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {8CC74F2A-573B-480F-9872-7C4597493B66}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {8CC74F2A-573B-480F-9872-7C4597493B66}.Release|Any CPU.Build.0 = Release|Any CPU
+ {098387B9-B28F-4854-9323-2B9B67E523E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {098387B9-B28F-4854-9323-2B9B67E523E2}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {098387B9-B28F-4854-9323-2B9B67E523E2}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {098387B9-B28F-4854-9323-2B9B67E523E2}.Release|Any CPU.Build.0 = Release|Any CPU
+ {187718A5-03C3-431A-A80D-5E0A64F86C05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {187718A5-03C3-431A-A80D-5E0A64F86C05}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {187718A5-03C3-431A-A80D-5E0A64F86C05}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {187718A5-03C3-431A-A80D-5E0A64F86C05}.Release|Any CPU.Build.0 = Release|Any CPU
+ {26E75959-FA49-4328-9BB2-187E45F3F94D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {26E75959-FA49-4328-9BB2-187E45F3F94D}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {26E75959-FA49-4328-9BB2-187E45F3F94D}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {26E75959-FA49-4328-9BB2-187E45F3F94D}.Release|Any CPU.Build.0 = Release|Any CPU
+ {5C279AA1-3F00-4FD4-8D61-65E6EC385B05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {5C279AA1-3F00-4FD4-8D61-65E6EC385B05}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {5C279AA1-3F00-4FD4-8D61-65E6EC385B05}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {5C279AA1-3F00-4FD4-8D61-65E6EC385B05}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D0B30993-0242-4FC0-A7DA-D8A78B194D13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D0B30993-0242-4FC0-A7DA-D8A78B194D13}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D0B30993-0242-4FC0-A7DA-D8A78B194D13}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D0B30993-0242-4FC0-A7DA-D8A78B194D13}.Release|Any CPU.Build.0 = Release|Any CPU
+ {E0A4BE17-935E-433A-B22A-C94394C59BA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {E0A4BE17-935E-433A-B22A-C94394C59BA6}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {E0A4BE17-935E-433A-B22A-C94394C59BA6}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {E0A4BE17-935E-433A-B22A-C94394C59BA6}.Release|Any CPU.Build.0 = Release|Any CPU
+ {9E08DF86-2BC4-4760-97A3-C873AC33295C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {9E08DF86-2BC4-4760-97A3-C873AC33295C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {9E08DF86-2BC4-4760-97A3-C873AC33295C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {9E08DF86-2BC4-4760-97A3-C873AC33295C}.Release|Any CPU.Build.0 = Release|Any CPU
+ {0B7E609B-B842-424D-ABD2-EDFBDDFE7051}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {0B7E609B-B842-424D-ABD2-EDFBDDFE7051}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {0B7E609B-B842-424D-ABD2-EDFBDDFE7051}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {0B7E609B-B842-424D-ABD2-EDFBDDFE7051}.Release|Any CPU.Build.0 = Release|Any CPU
+ {F48A94E6-5EAF-4C48-8AA4-CFCA459E0D02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F48A94E6-5EAF-4C48-8AA4-CFCA459E0D02}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F48A94E6-5EAF-4C48-8AA4-CFCA459E0D02}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F48A94E6-5EAF-4C48-8AA4-CFCA459E0D02}.Release|Any CPU.Build.0 = Release|Any CPU
+ {74206FEF-72A6-4972-B810-C75282D01F37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {74206FEF-72A6-4972-B810-C75282D01F37}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {74206FEF-72A6-4972-B810-C75282D01F37}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {74206FEF-72A6-4972-B810-C75282D01F37}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6042A1F6-8A71-4B1A-B944-71E16179C971}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6042A1F6-8A71-4B1A-B944-71E16179C971}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6042A1F6-8A71-4B1A-B944-71E16179C971}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6042A1F6-8A71-4B1A-B944-71E16179C971}.Release|Any CPU.Build.0 = Release|Any CPU
+ {6ADE7CAF-260E-4E71-B4FA-E96819A0F43A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {6ADE7CAF-260E-4E71-B4FA-E96819A0F43A}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {6ADE7CAF-260E-4E71-B4FA-E96819A0F43A}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {6ADE7CAF-260E-4E71-B4FA-E96819A0F43A}.Release|Any CPU.Build.0 = Release|Any CPU
+ {65B43722-08F5-4F0D-ADAE-E7C6768E59BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {65B43722-08F5-4F0D-ADAE-E7C6768E59BC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {65B43722-08F5-4F0D-ADAE-E7C6768E59BC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {65B43722-08F5-4F0D-ADAE-E7C6768E59BC}.Release|Any CPU.Build.0 = Release|Any CPU
+ {45B6591E-6517-4F57-9AFA-F28AF880B725}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {45B6591E-6517-4F57-9AFA-F28AF880B725}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {45B6591E-6517-4F57-9AFA-F28AF880B725}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {45B6591E-6517-4F57-9AFA-F28AF880B725}.Release|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@@ -702,6 +800,24 @@ Global
{F9F30B96-B456-452A-843F-904E89BB1B58} = {AD00688C-1F70-4439-BCF5-8931989359E0}
{B64703AF-1554-4087-A638-E295444F2F86} = {AD00688C-1F70-4439-BCF5-8931989359E0}
{F2A770E7-17A5-4009-9DE2-703940F34A3D} = {AD00688C-1F70-4439-BCF5-8931989359E0}
+ {220D5B7C-FD10-46D8-82A1-FAE877DE59E6} = {A8D42645-BAE3-4F2E-BC5B-889173CEC63C}
+ {4B0BD42D-BDE6-449F-8608-580399290ABE} = {220D5B7C-FD10-46D8-82A1-FAE877DE59E6}
+ {4995F694-3DE4-4678-BED4-3C5D8B5F0158} = {220D5B7C-FD10-46D8-82A1-FAE877DE59E6}
+ {8CC74F2A-573B-480F-9872-7C4597493B66} = {4B0BD42D-BDE6-449F-8608-580399290ABE}
+ {098387B9-B28F-4854-9323-2B9B67E523E2} = {4B0BD42D-BDE6-449F-8608-580399290ABE}
+ {187718A5-03C3-431A-A80D-5E0A64F86C05} = {4B0BD42D-BDE6-449F-8608-580399290ABE}
+ {26E75959-FA49-4328-9BB2-187E45F3F94D} = {4B0BD42D-BDE6-449F-8608-580399290ABE}
+ {5C279AA1-3F00-4FD4-8D61-65E6EC385B05} = {4B0BD42D-BDE6-449F-8608-580399290ABE}
+ {D0B30993-0242-4FC0-A7DA-D8A78B194D13} = {4B0BD42D-BDE6-449F-8608-580399290ABE}
+ {E0A4BE17-935E-433A-B22A-C94394C59BA6} = {4B0BD42D-BDE6-449F-8608-580399290ABE}
+ {9E08DF86-2BC4-4760-97A3-C873AC33295C} = {4B0BD42D-BDE6-449F-8608-580399290ABE}
+ {0B7E609B-B842-424D-ABD2-EDFBDDFE7051} = {4B0BD42D-BDE6-449F-8608-580399290ABE}
+ {F48A94E6-5EAF-4C48-8AA4-CFCA459E0D02} = {4995F694-3DE4-4678-BED4-3C5D8B5F0158}
+ {74206FEF-72A6-4972-B810-C75282D01F37} = {4995F694-3DE4-4678-BED4-3C5D8B5F0158}
+ {6042A1F6-8A71-4B1A-B944-71E16179C971} = {4995F694-3DE4-4678-BED4-3C5D8B5F0158}
+ {6ADE7CAF-260E-4E71-B4FA-E96819A0F43A} = {4995F694-3DE4-4678-BED4-3C5D8B5F0158}
+ {65B43722-08F5-4F0D-ADAE-E7C6768E59BC} = {4995F694-3DE4-4678-BED4-3C5D8B5F0158}
+ {45B6591E-6517-4F57-9AFA-F28AF880B725} = {4995F694-3DE4-4678-BED4-3C5D8B5F0158}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {28315BFD-90E7-4E14-A2EA-F3D23AF4126F}
diff --git a/samples/EasyMall/aspnet-core/src/EasyMall.Application.Contracts/EasyMall.Application.Contracts.csproj b/samples/EasyMall/aspnet-core/src/EasyMall.Application.Contracts/EasyMall.Application.Contracts.csproj
index 84ac97e1..272d9987 100644
--- a/samples/EasyMall/aspnet-core/src/EasyMall.Application.Contracts/EasyMall.Application.Contracts.csproj
+++ b/samples/EasyMall/aspnet-core/src/EasyMall.Application.Contracts/EasyMall.Application.Contracts.csproj
@@ -8,11 +8,7 @@
-
-
-
-
-
+
diff --git a/samples/EasyMall/aspnet-core/src/EasyMall.Application.Contracts/EasyMallApplicationContractsModule.cs b/samples/EasyMall/aspnet-core/src/EasyMall.Application.Contracts/EasyMallApplicationContractsModule.cs
index 37b1013d..86d93138 100644
--- a/samples/EasyMall/aspnet-core/src/EasyMall.Application.Contracts/EasyMallApplicationContractsModule.cs
+++ b/samples/EasyMall/aspnet-core/src/EasyMall.Application.Contracts/EasyMallApplicationContractsModule.cs
@@ -1,8 +1,4 @@
-using EasyAbp.EShop.Baskets;
-using EasyAbp.EShop.Orders;
-using EasyAbp.EShop.Payments;
-using EasyAbp.EShop.Products;
-using EasyAbp.EShop.Stores;
+using EasyAbp.EShop;
using EasyAbp.PaymentService.WeChatPay;
using Volo.Abp.Account;
using Volo.Abp.FeatureManagement;
@@ -22,11 +18,7 @@ namespace EasyMall
typeof(AbpPermissionManagementApplicationContractsModule),
typeof(AbpTenantManagementApplicationContractsModule),
typeof(AbpObjectExtendingModule),
- typeof(EShopBasketsApplicationContractsModule),
- typeof(EShopOrdersApplicationContractsModule),
- typeof(EShopPaymentsApplicationContractsModule),
- typeof(EShopProductsApplicationContractsModule),
- typeof(EShopStoresApplicationContractsModule),
+ typeof(EShopApplicationContractsModule),
typeof(PaymentServiceWeChatPayApplicationContractsModule)
)]
public class EasyMallApplicationContractsModule : AbpModule
diff --git a/samples/EasyMall/aspnet-core/src/EasyMall.Application/EasyMall.Application.csproj b/samples/EasyMall/aspnet-core/src/EasyMall.Application/EasyMall.Application.csproj
index e2af44c8..6b266258 100644
--- a/samples/EasyMall/aspnet-core/src/EasyMall.Application/EasyMall.Application.csproj
+++ b/samples/EasyMall/aspnet-core/src/EasyMall.Application/EasyMall.Application.csproj
@@ -8,11 +8,7 @@
-
-
-
-
-
+
diff --git a/samples/EasyMall/aspnet-core/src/EasyMall.Application/EasyMallApplicationModule.cs b/samples/EasyMall/aspnet-core/src/EasyMall.Application/EasyMallApplicationModule.cs
index e106929c..0853cd09 100644
--- a/samples/EasyMall/aspnet-core/src/EasyMall.Application/EasyMallApplicationModule.cs
+++ b/samples/EasyMall/aspnet-core/src/EasyMall.Application/EasyMallApplicationModule.cs
@@ -1,8 +1,4 @@
-using EasyAbp.EShop.Baskets;
-using EasyAbp.EShop.Orders;
-using EasyAbp.EShop.Payments;
-using EasyAbp.EShop.Products;
-using EasyAbp.EShop.Stores;
+using EasyAbp.EShop;
using EasyAbp.PaymentService.WeChatPay;
using Volo.Abp.Account;
using Volo.Abp.AutoMapper;
@@ -22,11 +18,7 @@ namespace EasyMall
typeof(AbpPermissionManagementApplicationModule),
typeof(AbpTenantManagementApplicationModule),
typeof(AbpFeatureManagementApplicationModule),
- typeof(EShopBasketsApplicationModule),
- typeof(EShopOrdersApplicationModule),
- typeof(EShopPaymentsApplicationModule),
- typeof(EShopProductsApplicationModule),
- typeof(EShopStoresApplicationModule),
+ typeof(EShopApplicationModule),
typeof(PaymentServiceWeChatPayApplicationModule)
)]
public class EasyMallApplicationModule : AbpModule
diff --git a/samples/EasyMall/aspnet-core/src/EasyMall.Domain.Shared/EasyMall.Domain.Shared.csproj b/samples/EasyMall/aspnet-core/src/EasyMall.Domain.Shared/EasyMall.Domain.Shared.csproj
index a0011a93..75809d38 100644
--- a/samples/EasyMall/aspnet-core/src/EasyMall.Domain.Shared/EasyMall.Domain.Shared.csproj
+++ b/samples/EasyMall/aspnet-core/src/EasyMall.Domain.Shared/EasyMall.Domain.Shared.csproj
@@ -17,6 +17,7 @@
+
@@ -24,12 +25,4 @@
-
-
-
-
-
-
-
-
diff --git a/samples/EasyMall/aspnet-core/src/EasyMall.Domain.Shared/EasyMallDomainSharedModule.cs b/samples/EasyMall/aspnet-core/src/EasyMall.Domain.Shared/EasyMallDomainSharedModule.cs
index d81fca27..058dc795 100644
--- a/samples/EasyMall/aspnet-core/src/EasyMall.Domain.Shared/EasyMallDomainSharedModule.cs
+++ b/samples/EasyMall/aspnet-core/src/EasyMall.Domain.Shared/EasyMallDomainSharedModule.cs
@@ -1,8 +1,4 @@
-using EasyAbp.EShop.Baskets;
-using EasyAbp.EShop.Orders;
-using EasyAbp.EShop.Payments;
-using EasyAbp.EShop.Products;
-using EasyAbp.EShop.Stores;
+using EasyAbp.EShop;
using EasyAbp.PaymentService.WeChatPay;
using EasyMall.Localization;
using Volo.Abp.AuditLogging;
@@ -29,11 +25,7 @@ namespace EasyMall
typeof(AbpPermissionManagementDomainSharedModule),
typeof(AbpSettingManagementDomainSharedModule),
typeof(AbpTenantManagementDomainSharedModule),
- typeof(EShopBasketsDomainSharedModule),
- typeof(EShopOrdersDomainSharedModule),
- typeof(EShopPaymentsDomainSharedModule),
- typeof(EShopProductsDomainSharedModule),
- typeof(EShopStoresDomainSharedModule),
+ typeof(EShopDomainSharedModule),
typeof(PaymentServiceWeChatPayDomainSharedModule)
)]
public class EasyMallDomainSharedModule : AbpModule
diff --git a/samples/EasyMall/aspnet-core/src/EasyMall.Domain/EasyMall.Domain.csproj b/samples/EasyMall/aspnet-core/src/EasyMall.Domain/EasyMall.Domain.csproj
index 264685af..7085a74b 100644
--- a/samples/EasyMall/aspnet-core/src/EasyMall.Domain/EasyMall.Domain.csproj
+++ b/samples/EasyMall/aspnet-core/src/EasyMall.Domain/EasyMall.Domain.csproj
@@ -8,11 +8,7 @@
-
-
-
-
-
+
diff --git a/samples/EasyMall/aspnet-core/src/EasyMall.Domain/EasyMallDomainModule.cs b/samples/EasyMall/aspnet-core/src/EasyMall.Domain/EasyMallDomainModule.cs
index 332dbc3d..a184f868 100644
--- a/samples/EasyMall/aspnet-core/src/EasyMall.Domain/EasyMallDomainModule.cs
+++ b/samples/EasyMall/aspnet-core/src/EasyMall.Domain/EasyMallDomainModule.cs
@@ -1,8 +1,4 @@
-using EasyAbp.EShop.Baskets;
-using EasyAbp.EShop.Orders;
-using EasyAbp.EShop.Payments;
-using EasyAbp.EShop.Products;
-using EasyAbp.EShop.Stores;
+using EasyAbp.EShop;
using EasyAbp.PaymentService.Payments;
using EasyAbp.PaymentService.WeChatPay;
using EasyMall.MultiTenancy;
@@ -34,11 +30,7 @@ namespace EasyMall
typeof(AbpPermissionManagementDomainIdentityServerModule),
typeof(AbpSettingManagementDomainModule),
typeof(AbpTenantManagementDomainModule),
- typeof(EShopBasketsDomainModule),
- typeof(EShopOrdersDomainModule),
- typeof(EShopPaymentsDomainModule),
- typeof(EShopProductsDomainModule),
- typeof(EShopStoresDomainModule),
+ typeof(EShopDomainModule),
typeof(PaymentServiceWeChatPayDomainModule)
)]
public class EasyMallDomainModule : AbpModule
diff --git a/samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore/EasyMall.EntityFrameworkCore.csproj b/samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore/EasyMall.EntityFrameworkCore.csproj
index 6141fa5a..f0f0b05b 100644
--- a/samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore/EasyMall.EntityFrameworkCore.csproj
+++ b/samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore/EasyMall.EntityFrameworkCore.csproj
@@ -8,11 +8,7 @@
-
-
-
-
-
+
diff --git a/samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore/EntityFrameworkCore/EasyMallEntityFrameworkCoreModule.cs b/samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore/EntityFrameworkCore/EasyMallEntityFrameworkCoreModule.cs
index 34bdda16..5efc9575 100644
--- a/samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore/EntityFrameworkCore/EasyMallEntityFrameworkCoreModule.cs
+++ b/samples/EasyMall/aspnet-core/src/EasyMall.EntityFrameworkCore/EntityFrameworkCore/EasyMallEntityFrameworkCoreModule.cs
@@ -1,8 +1,4 @@
-using EasyAbp.EShop.Baskets.EntityFrameworkCore;
-using EasyAbp.EShop.Orders.EntityFrameworkCore;
-using EasyAbp.EShop.Payments.EntityFrameworkCore;
-using EasyAbp.EShop.Products.EntityFrameworkCore;
-using EasyAbp.EShop.Stores.EntityFrameworkCore;
+using EasyAbp.EShop.EntityFrameworkCore;
using EasyAbp.PaymentService.WeChatPay.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.AuditLogging.EntityFrameworkCore;
@@ -30,11 +26,7 @@ namespace EasyMall.EntityFrameworkCore
typeof(AbpAuditLoggingEntityFrameworkCoreModule),
typeof(AbpTenantManagementEntityFrameworkCoreModule),
typeof(AbpFeatureManagementEntityFrameworkCoreModule),
- typeof(EShopBasketsEntityFrameworkCoreModule),
- typeof(EShopOrdersEntityFrameworkCoreModule),
- typeof(EShopPaymentsEntityFrameworkCoreModule),
- typeof(EShopProductsEntityFrameworkCoreModule),
- typeof(EShopStoresEntityFrameworkCoreModule),
+ typeof(EShopEntityFrameworkCoreModule),
typeof(PaymentServiceWeChatPayEntityFrameworkCoreModule)
)]
public class EasyMallEntityFrameworkCoreModule : AbpModule
diff --git a/samples/EasyMall/aspnet-core/src/EasyMall.HttpApi.Client/EasyMall.HttpApi.Client.csproj b/samples/EasyMall/aspnet-core/src/EasyMall.HttpApi.Client/EasyMall.HttpApi.Client.csproj
index 72c918d5..e5772e52 100644
--- a/samples/EasyMall/aspnet-core/src/EasyMall.HttpApi.Client/EasyMall.HttpApi.Client.csproj
+++ b/samples/EasyMall/aspnet-core/src/EasyMall.HttpApi.Client/EasyMall.HttpApi.Client.csproj
@@ -8,11 +8,7 @@
-
-
-
-
-
+
diff --git a/samples/EasyMall/aspnet-core/src/EasyMall.HttpApi.Client/EasyMallHttpApiClientModule.cs b/samples/EasyMall/aspnet-core/src/EasyMall.HttpApi.Client/EasyMallHttpApiClientModule.cs
index d9058fe9..14ca6a7d 100644
--- a/samples/EasyMall/aspnet-core/src/EasyMall.HttpApi.Client/EasyMallHttpApiClientModule.cs
+++ b/samples/EasyMall/aspnet-core/src/EasyMall.HttpApi.Client/EasyMallHttpApiClientModule.cs
@@ -1,8 +1,4 @@
-using EasyAbp.EShop.Baskets;
-using EasyAbp.EShop.Orders;
-using EasyAbp.EShop.Payments;
-using EasyAbp.EShop.Products;
-using EasyAbp.EShop.Stores;
+using EasyAbp.EShop;
using EasyAbp.PaymentService.WeChatPay;
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Account;
@@ -21,11 +17,7 @@ namespace EasyMall
typeof(AbpPermissionManagementHttpApiClientModule),
typeof(AbpTenantManagementHttpApiClientModule),
typeof(AbpFeatureManagementHttpApiClientModule),
- typeof(EShopBasketsHttpApiClientModule),
- typeof(EShopOrdersHttpApiClientModule),
- typeof(EShopPaymentsHttpApiClientModule),
- typeof(EShopProductsHttpApiClientModule),
- typeof(EShopStoresHttpApiClientModule),
+ typeof(EShopHttpApiClientModule),
typeof(PaymentServiceWeChatPayHttpApiClientModule)
)]
public class EasyMallHttpApiClientModule : AbpModule
diff --git a/samples/EasyMall/aspnet-core/src/EasyMall.HttpApi/EasyMall.HttpApi.csproj b/samples/EasyMall/aspnet-core/src/EasyMall.HttpApi/EasyMall.HttpApi.csproj
index 24d132e3..ad5bdfb3 100644
--- a/samples/EasyMall/aspnet-core/src/EasyMall.HttpApi/EasyMall.HttpApi.csproj
+++ b/samples/EasyMall/aspnet-core/src/EasyMall.HttpApi/EasyMall.HttpApi.csproj
@@ -8,11 +8,7 @@
-
-
-
-
-
+
diff --git a/samples/EasyMall/aspnet-core/src/EasyMall.HttpApi/EasyMallHttpApiModule.cs b/samples/EasyMall/aspnet-core/src/EasyMall.HttpApi/EasyMallHttpApiModule.cs
index 7b9efd67..7dc94d8c 100644
--- a/samples/EasyMall/aspnet-core/src/EasyMall.HttpApi/EasyMallHttpApiModule.cs
+++ b/samples/EasyMall/aspnet-core/src/EasyMall.HttpApi/EasyMallHttpApiModule.cs
@@ -1,8 +1,4 @@
-using EasyAbp.EShop.Baskets;
-using EasyAbp.EShop.Orders;
-using EasyAbp.EShop.Payments;
-using EasyAbp.EShop.Products;
-using EasyAbp.EShop.Stores;
+using EasyAbp.EShop;
using EasyAbp.PaymentService.WeChatPay;
using Volo.Abp.Account;
using Volo.Abp.FeatureManagement;
@@ -20,11 +16,7 @@ namespace EasyMall
typeof(AbpPermissionManagementHttpApiModule),
typeof(AbpTenantManagementHttpApiModule),
typeof(AbpFeatureManagementHttpApiModule),
- typeof(EShopBasketsHttpApiModule),
- typeof(EShopOrdersHttpApiModule),
- typeof(EShopPaymentsHttpApiModule),
- typeof(EShopProductsHttpApiModule),
- typeof(EShopStoresHttpApiModule),
+ typeof(EShopHttpApiModule),
typeof(PaymentServiceWeChatPayHttpApiModule)
)]
public class EasyMallHttpApiModule : AbpModule
diff --git a/samples/EasyMall/aspnet-core/src/EasyMall.Web/EasyMall.Web.csproj b/samples/EasyMall/aspnet-core/src/EasyMall.Web/EasyMall.Web.csproj
index 592a7cf7..aae6648a 100644
--- a/samples/EasyMall/aspnet-core/src/EasyMall.Web/EasyMall.Web.csproj
+++ b/samples/EasyMall/aspnet-core/src/EasyMall.Web/EasyMall.Web.csproj
@@ -41,11 +41,7 @@
-
-
-
-
-
+
diff --git a/samples/EasyMall/aspnet-core/src/EasyMall.Web/EasyMallWebModule.cs b/samples/EasyMall/aspnet-core/src/EasyMall.Web/EasyMallWebModule.cs
index 1be1e5a9..0cb61ac7 100644
--- a/samples/EasyMall/aspnet-core/src/EasyMall.Web/EasyMallWebModule.cs
+++ b/samples/EasyMall/aspnet-core/src/EasyMall.Web/EasyMallWebModule.cs
@@ -10,6 +10,7 @@ using EasyAbp.EShop.Products;
using EasyAbp.EShop.Products.Web;
using EasyAbp.EShop.Stores;
using EasyAbp.EShop.Stores.Web;
+using EasyAbp.EShop.Web;
using EasyAbp.PaymentService;
using EasyAbp.PaymentService.WeChatPay;
using EasyAbp.PaymentService.WeChatPay.Web;
@@ -63,11 +64,7 @@ namespace EasyMall.Web
typeof(AbpAspNetCoreAuthenticationJwtBearerModule),
typeof(AbpTenantManagementWebModule),
typeof(AbpAspNetCoreSerilogModule),
- typeof(EShopBasketsWebModule),
- typeof(EShopOrdersWebModule),
- typeof(EShopPaymentsWebModule),
- typeof(EShopProductsWebModule),
- typeof(EShopStoresWebModule),
+ typeof(EShopWebModule),
typeof(PaymentServiceWeChatPayWebModule)
)]
public class EasyMallWebModule : AbpModule