Merge branch 'dev' into cms-kit/menu-management

pull/9261/head
Enis Necipoğlu 4 years ago
commit aa2fb2572d

@ -32,6 +32,7 @@
"SeeDocuments": "See Documents", "SeeDocuments": "See Documents",
"Samples": "Samples", "Samples": "Samples",
"FreeDDDBook": "Free DDD E-book", "FreeDDDBook": "Free DDD E-book",
"New": "New" "New": "New",
"Volo.AbpIo.Domain:020005": "License extend year can not be lower than {MinExtendLicenseYear} year and greater than {MaxExtendLicenseYear} years "
} }
} }

@ -34,6 +34,7 @@
"Framework": "Framework", "Framework": "Framework",
"Support": "Support", "Support": "Support",
"FreeDDDBook": "Free DDD E-book", "FreeDDDBook": "Free DDD E-book",
"New": "New" "New": "New",
"Volo.AbpIo.Domain:020005": "License extend year can not be lower than {MinExtendLicenseYear} year and greater than {MaxExtendLicenseYear} years "
} }
} }

@ -28,6 +28,7 @@
"Commercial": "Ticari", "Commercial": "Ticari",
"SeeDocuments": "Dokümanlara Göz Atın", "SeeDocuments": "Dokümanlara Göz Atın",
"FreeDDDBook": "Ücretsiz DDD Kitabı", "FreeDDDBook": "Ücretsiz DDD Kitabı",
"New": "Yeni" "New": "Yeni",
"Volo.AbpIo.Domain:020005": "Lisans uzatma yılı {MinExtendLicenseYear} yıldan az {MaxExtendLicenseYear} yıldan fazla olamaz."
} }
} }

@ -32,6 +32,6 @@ DDD mostly interest in the **Domain** and the **Application** layers, rather tha
* [Data Transfer Objects (DTOs)](Data-Transfer-Objects.md) * [Data Transfer Objects (DTOs)](Data-Transfer-Objects.md)
* [Unit of Work](Unit-Of-Work.md) * [Unit of Work](Unit-Of-Work.md)
## The Ultimate DDD Implementation Guide ## Free E-Book: Implementing DDD
See the [Implementing Domain Driven Design](Domain-Driven-Design-Implementation-Guide.md) guide as a **complete reference**. The Guide explains the Domain Driven Design and introduces explicit **rules and examples** to give a deep understanding of the **implementation details**. See the [Implementing Domain Driven Design book](https://abp.io/books/implementing-domain-driven-design) as a **complete reference**. This book explains the Domain Driven Design and introduces explicit **rules and examples** to give a deep understanding of the **implementation details**.

@ -29,8 +29,9 @@ ABP has a **comprehensive documentation** that not only explains the ABP Framewo
ABP offers a complete, modular and layered software architecture based on [Domain Driven Design](Domain-Driven-Design.md) principles and patterns. It also provides the necessary infrastructure to implement this architecture. ABP offers a complete, modular and layered software architecture based on [Domain Driven Design](Domain-Driven-Design.md) principles and patterns. It also provides the necessary infrastructure to implement this architecture.
* See the [Modularity](Module-Development-Basics.md) document to understand the module system. * See the [Modularity](Module-Development-Basics.md) document to understand the module system.
* [Implementing Domain Driven Design](Domain-Driven-Design-Implementation-Guide.md) document is an ultimate guide for who want to understand and implement the DDD. * [Implementing Domain Driven Design book](https://abp.io/books/implementing-domain-driven-design?ref=doc) is an ultimate guide for who want to understand and implement the DDD with the ABP Framework.
* [Microservice Architecture](Microservice-Architecture.md) document explains how ABP helps to create a microservice solution. * [Microservice Architecture](Microservice-Architecture.md) document explains how ABP helps to create a microservice solution.
* [Multi-Tenancy](Multi-Tenancy.md) document introduces multi-tenancy and explores the ABP multi-tenancy infrastructure.
### Infrastructure ### Infrastructure
@ -55,6 +56,14 @@ See the [Application Modules](Modules/Index.md) document for all pre-built modul
The [Startup templates](Startup-Templates/Index.md) are pre-built Visual Studio solution templates. You can create your own solution based on these templates to **immediately start your development**. The [Startup templates](Startup-Templates/Index.md) are pre-built Visual Studio solution templates. You can create your own solution based on these templates to **immediately start your development**.
## Free E-Book: Implementing Domain Driven Design
![Implementing Domain Driven Design](images/implementing-domain-driven-design-book.png)
A **practical guide** for implementing Domain Driven Design (DDD). While the implementation details are **based on the ABP Framework** infrastructure, the basic concepts, principles and models can be applied to any solution, even if it is not a .NET solution.
[Click here to get your free copy](https://abp.io/books/implementing-domain-driven-design?ref=doc).
## ABP Community ## ABP Community
### The Source Code ### The Source Code

@ -8,11 +8,9 @@ This document provides a road map, release schedule and planned features for the
This version will focus on **documentation** and **improvements** of current features. In addition, the following features are planned: This version will focus on **documentation** and **improvements** of current features. In addition, the following features are planned:
* Publishing distributed events as transactional ([#6126](https://github.com/abpframework/abp/issues/6126))
* Revisit the microservice demo solution ([#8385](https://github.com/abpframework/abp/issues/8385)) * Revisit the microservice demo solution ([#8385](https://github.com/abpframework/abp/issues/8385))
* A new UI Theme alternative to the Basic Theme ([#6132](https://github.com/abpframework/abp/issues/6132)) * A new UI Theme alternative to the Basic Theme ([#6132](https://github.com/abpframework/abp/issues/6132))
* Improvements and new features to the [CMS Kit](Modules/Cms-Kit.md) module ([#8380](https://github.com/abpframework/abp/issues/8380) [#8381](https://github.com/abpframework/abp/issues/8381)) * Improvements and new features to the [CMS Kit](Modules/Cms-Kit.md) module ([#8380](https://github.com/abpframework/abp/issues/8380) [#8381](https://github.com/abpframework/abp/issues/8381))
* Pre-configured test project for the [Blazor UI](UI/Blazor/Overall.md) ([#5516](https://github.com/abpframework/abp/issues/5516))
* Razor engine support for text templating ([#8373](https://github.com/abpframework/abp/issues/8373)) * Razor engine support for text templating ([#8373](https://github.com/abpframework/abp/issues/8373))
**Planned release date**: End of Quarter 2, 2021. See the [4.4 milestone](https://github.com/abpframework/abp/milestone/52) to track the progress. **Planned release date**: End of Quarter 2, 2021. See the [4.4 milestone](https://github.com/abpframework/abp/milestone/52) to track the progress.
@ -25,6 +23,7 @@ We planned to focus on the ABP Framework v5.0 after the 4.4 release. This versio
* Upgrading to Bootstrap 5.x ([#8922](https://github.com/abpframework/abp/issues/8922)) * Upgrading to Bootstrap 5.x ([#8922](https://github.com/abpframework/abp/issues/8922))
* Alternative to IdentityServer4 ([#7221](https://github.com/abpframework/abp/issues/7221)) * Alternative to IdentityServer4 ([#7221](https://github.com/abpframework/abp/issues/7221))
* Dapr integration ([#2183](https://github.com/abpframework/abp/issues/2183)) * Dapr integration ([#2183](https://github.com/abpframework/abp/issues/2183))
* Publishing distributed events as transactional ([#6126](https://github.com/abpframework/abp/issues/6126))
* Resource based authorization system ([#236](https://github.com/abpframework/abp/issues/236)) * Resource based authorization system ([#236](https://github.com/abpframework/abp/issues/236))
* API Versioning system: finalize & document ([#497](https://github.com/abpframework/abp/issues/497)) * API Versioning system: finalize & document ([#497](https://github.com/abpframework/abp/issues/497))
* Performance optimizations; Enabling .NET Trimming, using source generators and reducing reflection, etc. * Performance optimizations; Enabling .NET Trimming, using source generators and reducing reflection, etc.

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

@ -16,7 +16,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Castle.Core" Version="4.4.1" /> <PackageReference Include="Castle.Core" Version="4.4.1" />
<PackageReference Include="Castle.Core.AsyncInterceptor" Version="2.0.21-alpha" /> <PackageReference Include="Castle.Core.AsyncInterceptor" Version="2.0.0" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>

@ -15,7 +15,7 @@ namespace Volo.Abp.DependencyInjection
public IServiceCollection Services { get; } public IServiceCollection Services { get; }
public List<Type> ReplacedDbContextTypes { get; } public Dictionary<Type, Type> ReplacedDbContextTypes { get; }
public Type DefaultRepositoryDbContextType { get; protected set; } public Type DefaultRepositoryDbContextType { get; protected set; }
@ -39,7 +39,7 @@ namespace Volo.Abp.DependencyInjection
Services = services; Services = services;
DefaultRepositoryDbContextType = originalDbContextType; DefaultRepositoryDbContextType = originalDbContextType;
CustomRepositories = new Dictionary<Type, Type>(); CustomRepositories = new Dictionary<Type, Type>();
ReplacedDbContextTypes = new List<Type>(); ReplacedDbContextTypes = new Dictionary<Type, Type>();
SpecifiedDefaultRepositories = new List<Type>(); SpecifiedDefaultRepositories = new List<Type>();
} }
@ -47,15 +47,20 @@ namespace Volo.Abp.DependencyInjection
{ {
return ReplaceDbContext(typeof(TOtherDbContext)); return ReplaceDbContext(typeof(TOtherDbContext));
} }
public IAbpCommonDbContextRegistrationOptionsBuilder ReplaceDbContext<TOtherDbContext, TTargetDbContext>()
{
return ReplaceDbContext(typeof(TOtherDbContext), typeof(TTargetDbContext));
}
public IAbpCommonDbContextRegistrationOptionsBuilder ReplaceDbContext(Type otherDbContextType) public IAbpCommonDbContextRegistrationOptionsBuilder ReplaceDbContext(Type otherDbContextType, Type targetDbContextType = null)
{ {
if (!otherDbContextType.IsAssignableFrom(OriginalDbContextType)) if (!otherDbContextType.IsAssignableFrom(OriginalDbContextType))
{ {
throw new AbpException($"{OriginalDbContextType.AssemblyQualifiedName} should inherit/implement {otherDbContextType.AssemblyQualifiedName}!"); throw new AbpException($"{OriginalDbContextType.AssemblyQualifiedName} should inherit/implement {otherDbContextType.AssemblyQualifiedName}!");
} }
ReplacedDbContextTypes.AddIfNotContains(otherDbContextType); ReplacedDbContextTypes[otherDbContextType] = targetDbContextType;
return this; return this;
} }

@ -75,9 +75,17 @@ namespace Volo.Abp.DependencyInjection
IAbpCommonDbContextRegistrationOptionsBuilder ReplaceDbContext<TOtherDbContext>(); IAbpCommonDbContextRegistrationOptionsBuilder ReplaceDbContext<TOtherDbContext>();
/// <summary> /// <summary>
/// Replaces given DbContext type with this DbContext type. /// Replaces given DbContext type with the target DbContext type.
/// </summary>
/// <typeparam name="TOtherDbContext">The DbContext type to be replaced</typeparam>
/// <typeparam name="TTargetDbContext">The target DbContext type</typeparam>
IAbpCommonDbContextRegistrationOptionsBuilder ReplaceDbContext<TOtherDbContext, TTargetDbContext>();
/// <summary>
/// Replaces given DbContext type with the given or this DbContext type.
/// </summary> /// </summary>
/// <param name="otherDbContextType">The DbContext type to be replaced</param> /// <param name="otherDbContextType">The DbContext type to be replaced</param>
IAbpCommonDbContextRegistrationOptionsBuilder ReplaceDbContext(Type otherDbContextType); /// <param name="targetDbContextType">The target DbContext type (optional, used this DbContext type if not provided)</param>
IAbpCommonDbContextRegistrationOptionsBuilder ReplaceDbContext(Type otherDbContextType, Type targetDbContextType = null);
} }
} }

@ -31,18 +31,21 @@ namespace Microsoft.Extensions.DependencyInjection
services.TryAddTransient(DbContextOptionsFactory.Create<TDbContext>); services.TryAddTransient(DbContextOptionsFactory.Create<TDbContext>);
foreach (var dbContextType in options.ReplacedDbContextTypes) foreach (var entry in options.ReplacedDbContextTypes)
{ {
var originalDbContextType = entry.Key;
var targetDbContextType = entry.Value ?? typeof(TDbContext);
services.Replace( services.Replace(
ServiceDescriptor.Transient( ServiceDescriptor.Transient(
dbContextType, originalDbContextType,
sp => sp.GetRequiredService(typeof(TDbContext)) sp => sp.GetRequiredService(targetDbContextType)
) )
); );
services.Configure<AbpDbContextOptions>(opts => services.Configure<AbpDbContextOptions>(opts =>
{ {
opts.DbContextReplacements[dbContextType] = typeof(TDbContext); opts.DbContextReplacements[originalDbContextType] = targetDbContextType;
}); });
} }

@ -371,17 +371,20 @@ namespace Volo.Abp.EntityFrameworkCore
protected virtual void ApplyAbpConceptsForModifiedEntity(EntityEntry entry, EntityChangeReport changeReport) protected virtual void ApplyAbpConceptsForModifiedEntity(EntityEntry entry, EntityChangeReport changeReport)
{ {
UpdateConcurrencyStamp(entry); if (entry.State == EntityState.Modified && entry.Properties.Any(x => x.IsModified && x.Metadata.ValueGenerated == ValueGenerated.Never))
SetModificationAuditProperties(entry);
if (entry.Entity is ISoftDelete && entry.Entity.As<ISoftDelete>().IsDeleted)
{
SetDeletionAuditProperties(entry);
changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Deleted));
}
else
{ {
changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Updated)); UpdateConcurrencyStamp(entry);
SetModificationAuditProperties(entry);
if (entry.Entity is ISoftDelete && entry.Entity.As<ISoftDelete>().IsDeleted)
{
SetDeletionAuditProperties(entry);
changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Deleted));
}
else
{
changeReport.ChangedEntities.Add(new EntityChangeEntry(entry.Entity, EntityChangeType.Updated));
}
} }
} }

@ -18,9 +18,17 @@ namespace Microsoft.Extensions.DependencyInjection
services.TryAddSingleton(options.DefaultRepositoryDbContextType, sp => sp.GetRequiredService<TMemoryDbContext>()); services.TryAddSingleton(options.DefaultRepositoryDbContextType, sp => sp.GetRequiredService<TMemoryDbContext>());
} }
foreach (var dbContextType in options.ReplacedDbContextTypes) foreach (var entry in options.ReplacedDbContextTypes)
{ {
services.Replace(ServiceDescriptor.Singleton(dbContextType, sp => sp.GetRequiredService<TMemoryDbContext>())); var originalDbContextType = entry.Key;
var targetDbContextType = entry.Value ?? typeof(TMemoryDbContext);
services.Replace(
ServiceDescriptor.Singleton(
originalDbContextType,
sp => sp.GetRequiredService(targetDbContextType)
)
);
} }
new MemoryDbRepositoryRegistrar(options).AddRepositories(); new MemoryDbRepositoryRegistrar(options).AddRepositories();

@ -25,23 +25,21 @@ namespace Microsoft.Extensions.DependencyInjection
optionsBuilder?.Invoke(options); optionsBuilder?.Invoke(options);
foreach (var dbContextType in options.ReplacedDbContextTypes) foreach (var entry in options.ReplacedDbContextTypes)
{
services.Replace(ServiceDescriptor.Transient(dbContextType, typeof(TMongoDbContext)));
}
foreach (var dbContextType in options.ReplacedDbContextTypes)
{ {
var originalDbContextType = entry.Key;
var targetDbContextType = entry.Value ?? typeof(TMongoDbContext);
services.Replace( services.Replace(
ServiceDescriptor.Transient( ServiceDescriptor.Transient(
dbContextType, originalDbContextType,
sp => sp.GetRequiredService(typeof(TMongoDbContext)) sp => sp.GetRequiredService(targetDbContextType)
) )
); );
services.Configure<AbpMongoDbContextOptions>(opts => services.Configure<AbpMongoDbContextOptions>(opts =>
{ {
opts.DbContextReplacements[dbContextType] = typeof(TMongoDbContext); opts.DbContextReplacements[originalDbContextType] = targetDbContextType;
}); });
} }

@ -1,9 +1,53 @@
using Volo.Abp.TestApp.Testing; using System;
using System.Threading.Tasks;
using Shouldly;
using Volo.Abp.TestApp;
using Volo.Abp.TestApp.Testing;
using Xunit;
namespace Volo.Abp.EntityFrameworkCore.Auditing namespace Volo.Abp.EntityFrameworkCore.Auditing
{ {
public class Auditing_Tests : Auditing_Tests<AbpEntityFrameworkCoreTestModule> public class Auditing_Tests : Auditing_Tests<AbpEntityFrameworkCoreTestModule>
{ {
[Fact]
public async Task Should_Not_Set_Modification_If_Properties_Generated_By_Database()
{
await WithUnitOfWorkAsync((async () =>
{
var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId);
douglas.LastActiveTime = DateTime.Now;
}));
await WithUnitOfWorkAsync((async () =>
{
var douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId);
douglas.ShouldNotBeNull();
douglas.LastModificationTime.ShouldBeNull();
douglas.LastModificationTime.ShouldBeNull();
douglas.LastModifierId.ShouldBeNull();
}));
}
[Fact]
public async Task Should_Set_Modification_If_Properties_Not_Generated_By_Database()
{
await WithUnitOfWorkAsync((async () =>
{
var douglas = await PersonRepository.GetAsync(TestDataBuilder.UserDouglasId);
douglas.LastActiveTime = DateTime.Now;
douglas.Age = 100;
}));
await WithUnitOfWorkAsync((async () =>
{
var douglas = await PersonRepository.FindAsync(TestDataBuilder.UserDouglasId);
douglas.ShouldNotBeNull();
douglas.LastModificationTime.ShouldNotBeNull();
douglas.LastModificationTime.Value.ShouldBeLessThanOrEqualTo(Clock.Now);
douglas.LastModifierId.ShouldBe(CurrentUserId);
}));
}
} }
} }

@ -1,3 +1,4 @@
using System;
using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.TestApp.SecondContext; using Volo.Abp.EntityFrameworkCore.TestApp.SecondContext;
using Volo.Abp.EntityFrameworkCore.TestApp.ThirdDbContext; using Volo.Abp.EntityFrameworkCore.TestApp.ThirdDbContext;
@ -16,10 +17,10 @@ namespace Volo.Abp.EntityFrameworkCore
public DbSet<BookInSecondDbContext> Books { get; set; } public DbSet<BookInSecondDbContext> Books { get; set; }
public DbSet<EntityWithIntPk> EntityWithIntPks { get; set; } public DbSet<EntityWithIntPk> EntityWithIntPks { get; set; }
public DbSet<Author> Author { get; set; } public DbSet<Author> Author { get; set; }
public TestMigrationsDbContext(DbContextOptions<TestMigrationsDbContext> options) public TestMigrationsDbContext(DbContextOptions<TestMigrationsDbContext> options)
: base(options) : base(options)
{ {
@ -36,6 +37,12 @@ namespace Volo.Abp.EntityFrameworkCore
b.HasKey(p => new { p.PersonId, p.Number }); b.HasKey(p => new { p.PersonId, p.Number });
}); });
modelBuilder.Entity<Person>(b =>
{
b.Property(x => x.LastActiveTime).ValueGeneratedOnAddOrUpdate().HasDefaultValue(DateTime.Now);
});
modelBuilder.Entity<City>(b => modelBuilder.Entity<City>(b =>
{ {
b.OwnsMany(c => c.Districts, d => b.OwnsMany(c => c.Districts, d =>

@ -1,4 +1,5 @@
using Microsoft.EntityFrameworkCore; using System;
using Microsoft.EntityFrameworkCore;
using Volo.Abp.DependencyInjection; using Volo.Abp.DependencyInjection;
using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.Modeling; using Volo.Abp.EntityFrameworkCore.Modeling;
@ -46,6 +47,11 @@ namespace Volo.Abp.TestApp.EntityFrameworkCore
b.ApplyObjectExtensionMappings(); b.ApplyObjectExtensionMappings();
}); });
modelBuilder.Entity<Person>(b =>
{
b.Property(x => x.LastActiveTime).ValueGeneratedOnAddOrUpdate().HasDefaultValue(DateTime.Now);
});
modelBuilder modelBuilder
.Entity<PersonView>(p => .Entity<PersonView>(p =>
{ {

@ -23,9 +23,10 @@ namespace Volo.Abp.TestApp.Domain
public virtual Collection<Phone> Phones { get; set; } public virtual Collection<Phone> Phones { get; set; }
public virtual DateTime LastActiveTime { get; set; }
private Person() private Person()
{ {
} }
public Person(Guid id, string name, int age, Guid? tenantId = null, Guid? cityId = null) public Person(Guid id, string name, int age, Guid? tenantId = null, Guid? cityId = null)
@ -65,4 +66,4 @@ namespace Volo.Abp.TestApp.Domain
); );
} }
} }
} }

@ -66,7 +66,7 @@ export interface ExtensionPropertyUiDto {
onTable: ExtensionPropertyUiTableDto; onTable: ExtensionPropertyUiTableDto;
onCreateForm: ExtensionPropertyUiFormDto; onCreateForm: ExtensionPropertyUiFormDto;
onEditForm: ExtensionPropertyUiFormDto; onEditForm: ExtensionPropertyUiFormDto;
lookup: ExtensionPropertyUiLookupDto; lookup?: ExtensionPropertyUiLookupDto;
} }
export interface ExtensionPropertyUiFormDto { export interface ExtensionPropertyUiFormDto {

@ -148,7 +148,7 @@ function createMockEntities(): Record<string, ObjectExtensions.EntityExtensionDt
onEditForm: { onEditForm: {
isVisible: true, isVisible: true,
}, },
lookup: {}, lookup: null,
}, },
attributes: [ attributes: [
{ {
@ -192,7 +192,7 @@ function createMockEntities(): Record<string, ObjectExtensions.EntityExtensionDt
onEditForm: { onEditForm: {
isVisible: true, isVisible: true,
}, },
lookup: {}, lookup: null,
}, },
attributes: [], attributes: [],
configuration: {}, configuration: {},
@ -227,7 +227,7 @@ function createMockEntities(): Record<string, ObjectExtensions.EntityExtensionDt
onEditForm: { onEditForm: {
isVisible: false, isVisible: false,
}, },
lookup: {}, lookup: null,
}, },
attributes: [], attributes: [],
configuration: {}, configuration: {},
@ -259,7 +259,7 @@ function createMockEntities(): Record<string, ObjectExtensions.EntityExtensionDt
onEditForm: { onEditForm: {
isVisible: false, isVisible: false,
}, },
lookup: {}, lookup: null,
}, },
attributes: [ attributes: [
{ {

@ -2,20 +2,20 @@
# yarn lockfile v1 # yarn lockfile v1
"@abp/ng.components@~4.3.1": "@abp/ng.components@~4.3.2":
version "4.3.1" version "4.3.2"
resolved "https://registry.yarnpkg.com/@abp/ng.components/-/ng.components-4.3.1.tgz#61f8dd9f506a10cc478721b9e069b5328919b808" resolved "https://registry.yarnpkg.com/@abp/ng.components/-/ng.components-4.3.2.tgz#6976ae0bf64bd7d69b2e90cdabf8477e9d8129ab"
integrity sha512-/TUz2JYUcH/NbWma5I3A0nI72YVafOdLGgBH3+L2DjpFYsn+0c7/n+9YCMwZ6Zm6DWAAQE5ZJa+vOEIUMOnVlA== integrity sha512-wFuN9ysAi71PxhmsxYBNHc03CcbC4Gc/Ga/ure271D6OHkcA888OeG4bRNqGs8w8BUJoZMJQ7F+UHwSA19PDzg==
dependencies: dependencies:
ng-zorro-antd "^11.0.0" ng-zorro-antd "^11.0.0"
tslib "^2.0.0" tslib "^2.0.0"
"@abp/ng.core@~4.3.1": "@abp/ng.core@~4.3.2":
version "4.3.1" version "4.3.2"
resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-4.3.1.tgz#631bfab8bc090b81e3637ced2fd3d01f8fd720d9" resolved "https://registry.yarnpkg.com/@abp/ng.core/-/ng.core-4.3.2.tgz#232d983d3b608377fdebdffd165fd7b0802efafa"
integrity sha512-e48h2OhyrFqBac7K//4aVQWCdjIqkhS1Pa+mh3YA30lv6LTbDdwLQc75q0mDs5PxCeGx3XPldgedMIP8pYWCsA== integrity sha512-p+JzBepMRhJNRAe+f1W2cJ1T/oMqAwXz1+Jb0ea8oGySUN1YFhvNNMgr3DGSfnR6UMfGED2pJAeBS/5TC3LC7g==
dependencies: dependencies:
"@abp/utils" "^4.3.0" "@abp/utils" "^4.3.1"
"@angular/localize" "~10.0.10" "@angular/localize" "~10.0.10"
"@ngxs/store" "^3.7.0" "@ngxs/store" "^3.7.0"
angular-oauth2-oidc "^10.0.0" angular-oauth2-oidc "^10.0.0"
@ -25,35 +25,35 @@
ts-toolbelt "6.15.4" ts-toolbelt "6.15.4"
tslib "^2.0.0" tslib "^2.0.0"
"@abp/ng.feature-management@~4.3.1": "@abp/ng.feature-management@~4.3.2":
version "4.3.1" version "4.3.2"
resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-4.3.1.tgz#b576583a35c435569494def6965512c99ef08a05" resolved "https://registry.yarnpkg.com/@abp/ng.feature-management/-/ng.feature-management-4.3.2.tgz#9e1dc02818788353ba7b998f967b40bc13352f73"
integrity sha512-/hRZYKlyIG1xHLWTbGX/tDCq8oGhU6M96IJoXAjUYJc2Nc3lvBAM21oMAG52B4ANWIELaKBX4k3+Su0yXjuUHg== integrity sha512-99cL/pE839NunmsP9+6ckO6QT7udYkD+dd/L5T3SYcDFxMlz75EpKnkNNqsrdEs4V4VopoboJeiv6JtrUkPNVw==
dependencies: dependencies:
"@abp/ng.theme.shared" "~4.3.1" "@abp/ng.theme.shared" "~4.3.2"
tslib "^2.0.0" tslib "^2.0.0"
"@abp/ng.identity@~4.3.1": "@abp/ng.identity@~4.3.2":
version "4.3.1" version "4.3.2"
resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-4.3.1.tgz#c92ff2f3cccec18cfb52ae47b11588e2e3ebb186" resolved "https://registry.yarnpkg.com/@abp/ng.identity/-/ng.identity-4.3.2.tgz#24ed3ccd003e023ac18ef875df5d727e50ad0016"
integrity sha512-X3EeGR+wuqpuGlSX6iV38QZctIAIgbZqaFBrYKnq97SsXxhQvxw7yQFm0MFxY3S6+ez23WX1C0r0HTpqXHNj0A== integrity sha512-EdbSLHC/yjszlMC76B2ydKoopaeCHYItw2GD57e9xSMu6aiKW8/9+3zzTvTdrJ0MSxaZvPo/3IN3cU48rsNwwg==
dependencies: dependencies:
"@abp/ng.permission-management" "~4.3.1" "@abp/ng.permission-management" "~4.3.2"
"@abp/ng.theme.shared" "~4.3.1" "@abp/ng.theme.shared" "~4.3.2"
tslib "^2.0.0" tslib "^2.0.0"
"@abp/ng.permission-management@~4.3.1": "@abp/ng.permission-management@~4.3.2":
version "4.3.1" version "4.3.2"
resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-4.3.1.tgz#aa0cc1c4136f9e9ddd946fe2f4ebb2cc08087cf7" resolved "https://registry.yarnpkg.com/@abp/ng.permission-management/-/ng.permission-management-4.3.2.tgz#d8514152fd43bd3a95e4e375ebd9e3895b73125c"
integrity sha512-c7PiXedtvvZ70wWWiEgi0UsbUM92tZi5U+l7dV/EKff54FPWb1AbZMSLOGGmiA66h9FoVEjY3PnRqVPvUN1JBQ== integrity sha512-rWPMpNfJu7cgmTK+TRwPH96AGBeNLzf2TZOfG53bqw6VRqiqqwQvY+54OD+kZGJw5xgNZQiE3Ze51f1CIgeE5Q==
dependencies: dependencies:
"@abp/ng.theme.shared" "~4.3.1" "@abp/ng.theme.shared" "~4.3.2"
tslib "^2.0.0" tslib "^2.0.0"
"@abp/ng.schematics@~4.3.1": "@abp/ng.schematics@~4.3.2":
version "4.3.1" version "4.3.2"
resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-4.3.1.tgz#3a6991131eab86baf6d4be943cfa059efcb2d52f" resolved "https://registry.yarnpkg.com/@abp/ng.schematics/-/ng.schematics-4.3.2.tgz#a792d8c9d99c0099f4a8d998be90721652f5efeb"
integrity sha512-eqqDRU+7RtoDkOlB9tVffYN4F7c135cW9R3LuubnabK29twPuv5BEFMWQO+GYQKFcdn7857LCEHAdP0HQe9grg== integrity sha512-gBV0f7vkbM9rs3HCeTxYDtnxCC6rXnSVrogtsOkZAqWR38riPMVDTK5u4yDeypCEFlMHaOF80QBj6lxpAr9Yrw==
dependencies: dependencies:
"@angular-devkit/core" "~11.0.2" "@angular-devkit/core" "~11.0.2"
"@angular-devkit/schematics" "~11.0.2" "@angular-devkit/schematics" "~11.0.2"
@ -62,38 +62,38 @@
should-quote "^1.0.0" should-quote "^1.0.0"
typescript "~3.9.2" typescript "~3.9.2"
"@abp/ng.setting-management@~4.3.1": "@abp/ng.setting-management@~4.3.2":
version "4.3.1" version "4.3.2"
resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-4.3.1.tgz#c7e2f35bbaa79bb89693febb397d8125bf6089b6" resolved "https://registry.yarnpkg.com/@abp/ng.setting-management/-/ng.setting-management-4.3.2.tgz#afb4540dcaf5e32764261377e771beb688314c5a"
integrity sha512-y+4EscXVBVWWYeT5CTlln4fiZQelsBq7O49LYq4/n122oY9ItCRP+/INtamhGBtHb8gEld4jMBtZQjZ3JUF24g== integrity sha512-FRrFZkQSq9mEAsNf3GCskh3UxXUzRGbIn4QUbruImeUvEhKmZiQGoTjjW18CPZiXd/y22iiYpRpovS2frcGbhQ==
dependencies: dependencies:
"@abp/ng.components" "~4.3.1" "@abp/ng.components" "~4.3.2"
"@abp/ng.theme.shared" "~4.3.1" "@abp/ng.theme.shared" "~4.3.2"
tslib "^2.0.0" tslib "^2.0.0"
"@abp/ng.tenant-management@~4.3.1": "@abp/ng.tenant-management@~4.3.2":
version "4.3.1" version "4.3.2"
resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-4.3.1.tgz#5bc42bd4015b38465a206f54435e5d9cc70fc2a3" resolved "https://registry.yarnpkg.com/@abp/ng.tenant-management/-/ng.tenant-management-4.3.2.tgz#fc6655d03ddd1b9aa0d3eedefe459c239ff18ec0"
integrity sha512-TEYx6DlypdSfa1hNCy2TuUR5uKCI4pyeVSl5Fs0QzKN4W7hcWJWYYWYaaXwrZ+/In8eo/MNUwYjx0G1ZMKxeCA== integrity sha512-xQ/NgXpP81B346W+Cgys3eHMBO68kQDizaazT3nip6o4MuEAY+sNjFKh2qeXbg6Xjy/qC/VwcuImTDKhONOcRg==
dependencies: dependencies:
"@abp/ng.feature-management" "~4.3.1" "@abp/ng.feature-management" "~4.3.2"
"@abp/ng.theme.shared" "~4.3.1" "@abp/ng.theme.shared" "~4.3.2"
tslib "^2.0.0" tslib "^2.0.0"
"@abp/ng.theme.basic@~4.3.1": "@abp/ng.theme.basic@~4.3.2":
version "4.3.1" version "4.3.2"
resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-4.3.1.tgz#7bfd4c8c10e000e052fa632f0e836f7172fed100" resolved "https://registry.yarnpkg.com/@abp/ng.theme.basic/-/ng.theme.basic-4.3.2.tgz#7243c814905e554f12ebefb933f09f03a008a006"
integrity sha512-RacWdY4yN+o8flmjm8XR6LlyQziJVqX3WxylVfgPybgNAiyFww7ZQ6cFMbDseqFmDTbvtYyRuG2tMiAPTZGfNQ== integrity sha512-tA6XCDe+fjgxz057N1/sPHMiPpO5XAMNvRBeRcYfvD1cJa2OQAbTGAdaVu0H268raRHVta3T7G8qt6++MySaRA==
dependencies: dependencies:
"@abp/ng.theme.shared" "~4.3.1" "@abp/ng.theme.shared" "~4.3.2"
tslib "^2.0.0" tslib "^2.0.0"
"@abp/ng.theme.shared@~4.3.1": "@abp/ng.theme.shared@~4.3.2":
version "4.3.1" version "4.3.2"
resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-4.3.1.tgz#1bfa9979d8f741c30a0bf40585fa3715a7e55017" resolved "https://registry.yarnpkg.com/@abp/ng.theme.shared/-/ng.theme.shared-4.3.2.tgz#be7d6a4eceee59700c66fe2fd9c0fc60f49ce60f"
integrity sha512-LHkrjCErBvFgYfU9msV1oQ7KKU5g7AiMgK4MLbzKpHaDhN0B0WCdOwUrN4ynn7iXU433quaph605QceoejL7Nw== integrity sha512-SJSexJUK26YvbpzYOl2XAV6IiTdt3j46c9ZzYIlMiJVrqAyW3GRvRBcBFEd2qfeq7dBnYYR9oN4sEcNqQL/gCQ==
dependencies: dependencies:
"@abp/ng.core" "~4.3.1" "@abp/ng.core" "~4.3.2"
"@fortawesome/fontawesome-free" "^5.14.0" "@fortawesome/fontawesome-free" "^5.14.0"
"@ng-bootstrap/ng-bootstrap" "^7.0.0" "@ng-bootstrap/ng-bootstrap" "^7.0.0"
"@ngx-validate/core" "^0.0.13" "@ngx-validate/core" "^0.0.13"
@ -102,13 +102,6 @@
chart.js "^2.9.3" chart.js "^2.9.3"
tslib "^2.0.0" tslib "^2.0.0"
"@abp/utils@^4.3.0":
version "4.3.0"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.0.tgz#5fe44ae9a76ba8760bfd54dc6cfc64c96acc4b67"
integrity sha512-FFPSn/cL+b7/wYoRjvQLNJ3KrTiqng2gKPGf+jtMZer92fcVZtsF21ew/z+yxgj+9DRYtWbvn5iu9/ZPKL5hiw==
dependencies:
just-compare "^1.3.0"
"@abp/utils@^4.3.1": "@abp/utils@^4.3.1":
version "4.3.1" version "4.3.1"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.1.tgz#cc9163a545526d1970d2d2b85803f345bb38b4a0" resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.1.tgz#cc9163a545526d1970d2d2b85803f345bb38b4a0"
@ -116,6 +109,13 @@
dependencies: dependencies:
just-compare "^1.3.0" just-compare "^1.3.0"
"@abp/utils@^4.3.2":
version "4.3.2"
resolved "https://registry.yarnpkg.com/@abp/utils/-/utils-4.3.2.tgz#ff8fa921aadf8ec6d1d8eb0572133907c19ac6e5"
integrity sha512-xUycN1bW+gTVfD0WJHXG5UbqAqAg/dVrZ/pXlnEGixp04vXwTI+o5oWTV2rQYiOyLbPzmpjSAZmxrkIcAgIQ1A==
dependencies:
just-compare "^1.3.0"
"@angular-builders/jest@^10.0.0": "@angular-builders/jest@^10.0.0":
version "10.0.1" version "10.0.1"
resolved "https://registry.yarnpkg.com/@angular-builders/jest/-/jest-10.0.1.tgz#a1a6fb5d11b5d54c051bdaa2012b5f046371560c" resolved "https://registry.yarnpkg.com/@angular-builders/jest/-/jest-10.0.1.tgz#a1a6fb5d11b5d54c051bdaa2012b5f046371560c"
@ -2506,13 +2506,6 @@
enhanced-resolve "5.6.0" enhanced-resolve "5.6.0"
webpack-sources "2.2.0" webpack-sources "2.2.0"
"@ngx-validate/core@^0.0.12":
version "0.0.12"
resolved "https://registry.yarnpkg.com/@ngx-validate/core/-/core-0.0.12.tgz#4924247c363e0e876e6d63794215914ac9232e8d"
integrity sha512-AhHfb44M2E2Wc37IX9DxAWjgSIZMNrzzpjnPL+VXMNJQj9GqynBjqw0zQtrGYANsAYeFPFhn7UuX6uqrkRvHtQ==
dependencies:
tslib "^1.9.0"
"@ngx-validate/core@^0.0.13": "@ngx-validate/core@^0.0.13":
version "0.0.13" version "0.0.13"
resolved "https://registry.yarnpkg.com/@ngx-validate/core/-/core-0.0.13.tgz#954c6d247df8107668f23a39db24ca45c274f3d9" resolved "https://registry.yarnpkg.com/@ngx-validate/core/-/core-0.0.13.tgz#954c6d247df8107668f23a39db24ca45c274f3d9"
@ -2534,20 +2527,6 @@
dependencies: dependencies:
tslib "^1.9.0" tslib "^1.9.0"
"@ngxs/router-plugin@^3.7.0":
version "3.7.1"
resolved "https://registry.yarnpkg.com/@ngxs/router-plugin/-/router-plugin-3.7.1.tgz#cd73224d5dd54ee070dd54cc26ba09a1fde189a8"
integrity sha512-5Pg+Ija4Z4eCYTLtVgZYxsbYqN35YD+Tak/WhHFXvOqFpt0zPMt8VQbgfEFXKOgoUsJYQ4qz/EWqc0GaRXL+Jw==
dependencies:
tslib "^1.9.0"
"@ngxs/storage-plugin@^3.7.0":
version "3.7.1"
resolved "https://registry.yarnpkg.com/@ngxs/storage-plugin/-/storage-plugin-3.7.1.tgz#39fbce9cf6585cc094d74e5efd54daae3fcd334d"
integrity sha512-2e/iHu2Ax/Z7hEfGZPCuUIPNiTb33e9kIM7xIho5BG18liKy1MTeZ7BS5PQKmMc7oY9Ji90ZjhU9uXnex/Em2w==
dependencies:
tslib "^1.9.0"
"@ngxs/store@^3.7.0": "@ngxs/store@^3.7.0":
version "3.7.1" version "3.7.1"
resolved "https://registry.yarnpkg.com/@ngxs/store/-/store-3.7.1.tgz#3333379eb36cfe475d019b6c894b263ea515b8a5" resolved "https://registry.yarnpkg.com/@ngxs/store/-/store-3.7.1.tgz#3333379eb36cfe475d019b6c894b263ea515b8a5"

@ -28,7 +28,7 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\MyCompanyName.MyProjectName.Host.Shared\MyCompanyName.MyProjectName.Host.Shared.csproj" /> <ProjectReference Include="..\MyCompanyName.MyProjectName.Host.Shared\MyCompanyName.MyProjectName.Host.Shared.csproj" />
<ProjectReference Include="..\..\src\MyCompanyName.MyProjectName.Blazor\MyCompanyName.MyProjectName.Blazor.csproj" /> <ProjectReference Include="..\..\src\MyCompanyName.MyProjectName.Blazor.WebAssembly\MyCompanyName.MyProjectName.Blazor.WebAssembly.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

@ -6,6 +6,7 @@ using Microsoft.AspNetCore.Components.WebAssembly.Hosting;
using Microsoft.Extensions.Configuration; using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Account; using Volo.Abp.Account;
using MyCompanyName.MyProjectName.Blazor.WebAssembly;
using Volo.Abp.AspNetCore.Components.Web.BasicTheme.Themes.Basic; using Volo.Abp.AspNetCore.Components.Web.BasicTheme.Themes.Basic;
using Volo.Abp.AspNetCore.Components.Web.Theming.Routing; using Volo.Abp.AspNetCore.Components.Web.Theming.Routing;
using Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme; using Volo.Abp.AspNetCore.Components.WebAssembly.BasicTheme;
@ -26,7 +27,7 @@ namespace MyCompanyName.MyProjectName.Blazor.Host
typeof(AbpIdentityBlazorWebAssemblyModule), typeof(AbpIdentityBlazorWebAssemblyModule),
typeof(AbpTenantManagementBlazorWebAssemblyModule), typeof(AbpTenantManagementBlazorWebAssemblyModule),
typeof(AbpSettingManagementBlazorWebAssemblyModule), typeof(AbpSettingManagementBlazorWebAssemblyModule),
typeof(MyProjectNameBlazorModule) typeof(MyProjectNameBlazorWebAssemblyModule)
)] )]
public class MyProjectNameBlazorHostModule : AbpModule public class MyProjectNameBlazorHostModule : AbpModule
{ {

Loading…
Cancel
Save