mirror of https://github.com/abpframework/abp.git
428 changed files with 8415 additions and 4515 deletions
@ -0,0 +1,7 @@ |
|||
./1-fetch-and-build.ps1 |
|||
./2-nuget-pack.ps1 |
|||
./3-nuget-push.ps1 |
|||
./4-npm-publish-mvc.ps1 |
|||
./5-npm-publish-angular.ps1 |
|||
./6-git-commit.ps1 |
|||
echo "Create a new release on GitHub manually and run the step 8..." |
|||
@ -0,0 +1,94 @@ |
|||
# ABP.IO Platform 5.1 RC.1 Has Been Released |
|||
|
|||
Today, we are releasing the [ABP Framework](https://abp.io/) and the [ABP Commercial](https://commercial.abp.io/) version **5.1 RC** (Release Candidate). This blog post introduces the new features and important changes in this new version. |
|||
|
|||
> **The planned release date for the [5.1 stable](https://github.com/abpframework/abp/milestone/64) version is February 8, 2022**. |
|||
|
|||
Please try this version and provide feedback for a more stable ABP version 5.1! Thank you all. |
|||
|
|||
## Get Started with the 5.1 RC |
|||
|
|||
follow the steps below to try the version 5.1 RC today; |
|||
|
|||
1) **Upgrade** the ABP CLI to the version `5.1.0-rc.1` using a command line terminal: |
|||
|
|||
````bash |
|||
dotnet tool update Volo.Abp.Cli -g --version 5.1.0-rc.1 |
|||
```` |
|||
|
|||
**or install** if you haven't installed before: |
|||
|
|||
````bash |
|||
dotnet tool install Volo.Abp.Cli -g --version 5.1.0-rc.1 |
|||
```` |
|||
|
|||
2) Create a **new application** with the `--preview` option: |
|||
|
|||
````bash |
|||
abp new BookStore --preview |
|||
```` |
|||
|
|||
See the [ABP CLI documentation](https://docs.abp.io/en/abp/latest/CLI) for all the available options. |
|||
|
|||
> You can also use the *Direct Download* tab on the [Get Started](https://abp.io/get-started) page by selecting the **Preview checkbox**. |
|||
|
|||
You can use any IDE that supports .NET 6.0 development (e.g. [Visual Studio 2022](https://visualstudio.microsoft.com/downloads/)). |
|||
|
|||
### Migration Notes & Breaking Changes |
|||
|
|||
TODO: Startup template changes |
|||
|
|||
## What's new with 5.1? |
|||
|
|||
In this section, I will introduce some major features released with this version. |
|||
|
|||
### DRAFT list of things done |
|||
|
|||
#### ABP Framework |
|||
|
|||
* Use new hosting model for the app template. [#10928](https://github.com/abpframework/abp/pull/10928) - what to do for existing solutions? |
|||
* Async application initialization methods on the AbpModule class [#6828](https://github.com/abpframework/abp/issues/6828) |
|||
* Angular 13? |
|||
* [#10552](https://github.com/abpframework/abp/pull/10696) Used file scoped namespaces :) |
|||
* Support markdown in CMS-Kit comments [#10792](https://github.com/abpframework/abp/pull/10792) |
|||
* eShopOnAbp is getting mature |
|||
* Nightly builds are working again |
|||
* Coming: New ABP.IO design! |
|||
|
|||
All issues & PRs in [5.1 milesone](https://github.com/abpframework/abp/milestone/60?closed=1). |
|||
|
|||
#### ABP Commercial |
|||
|
|||
* CMS Kit Pro: URL forwarding |
|||
* LeptonX is coming for ABP Blazor and MVC UI too (share the sample dashboard) |
|||
|
|||
### Header 1 |
|||
|
|||
TODO |
|||
|
|||
## Community News |
|||
|
|||
### ABP Community Talks 2021.1 |
|||
|
|||
 |
|||
|
|||
This is the second episode of the ABP Community Talks and we are talking about microservice development with the ABP Framework, based on the [eShopOnAbp](https://github.com/abpframework/eShopOnAbp) reference solution. This live meeting will be at **January 20, 2022, 17:00 (UTC)** on YouTube. |
|||
|
|||
**Join this event on the Kommunity platform: https://kommunity.com/volosoft/events/abp-community-talks-20221-microservice-development-acd0f44b** |
|||
|
|||
You can also [subscribe to the Volosoft channel](https://www.youtube.com/channel/UCO3XKlpvq8CA5MQNVS6b3dQ) for reminders for further ABP events and videos. |
|||
|
|||
### New ABP Community posts |
|||
|
|||
Here, some of the recent posts added to the [ABP community](https://community.abp.io/): |
|||
|
|||
* [Minimal API development with the ABP Framework](https://community.abp.io/articles/minimal-api-with-abp-hello-world-part-1-sg5i44p8) by [@antosubash](https://github.com/antosubash) (three parts, video tutorial). |
|||
* [Integrating the Syncfusion MVC Components to the ABP MVC UI](https://community.abp.io/articles/integrating-the-syncfusion-mvc-components-to-the-abp-mvc-ui-0gpkr1if) by [@EngincanV](https://github.com/EngincanV). |
|||
* [Add Tailwind CSS to your ABP Blazor UI](https://community.abp.io/articles/add-tailwindcss-to-your-abp-blazor-ui-vidiwzcy) by [@antosubash](https://github.com/antosubash) (video tutorial). |
|||
* [Import external users into the users Table from an ABP Framework application](https://community.abp.io/articles/import-external-users-into-the-users-table-from-an-abp-framework-application-7lnyw415) by [@bartvanhoey](https://github.com/bartvanhoey). |
|||
|
|||
Thanks to the ABP Community for all the contents they have published. You can also [post your ABP and .NET related (text or video) contents](https://community.abp.io/articles/submit) to the ABP Community. |
|||
|
|||
## Conclusion |
|||
|
|||
In this blog post, I summarized the news about that new version and the ABP Community. Please try it and provide feedback by opening issues on [the GitHub repository](https://github.com/abpframework/abp). Thank you all! |
|||
|
After Width: | Height: | Size: 559 KiB |
@ -0,0 +1,111 @@ |
|||
# How to Test Blazor Components in ABP |
|||
|
|||
## Source Code |
|||
|
|||
You can find the source of the example solution used in this article [here](https://github.com/abpframework/abp-samples/tree/master/BlazorPageUniTest). |
|||
|
|||
|
|||
In this article, I will use [bUnit](https://github.com/bUnit-dev/bUnit) for a simple test of a Blazor component. |
|||
|
|||
## Getting Started |
|||
|
|||
Use the ABP CLI to create a blazor app |
|||
|
|||
`abp new BookStore -t app -u blazor` |
|||
|
|||
Then add the `BookStore.Blazor.Tests` xunit test project to the solution, and add [bUnit](https://github.com/bUnit-dev/bUnit) package and `ProjectReference` to the test project. |
|||
|
|||
The contents of `BookStore.Blazor.Tests.csproj` |
|||
```xml |
|||
<Project Sdk="Microsoft.NET.Sdk"> |
|||
|
|||
<PropertyGroup> |
|||
<TargetFramework>net6.0</TargetFramework> |
|||
<Nullable>enable</Nullable> |
|||
<IsPackable>false</IsPackable> |
|||
</PropertyGroup> |
|||
|
|||
<ItemGroup> |
|||
<PackageReference Include="bunit" Version="1.2.49" /> |
|||
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.11.0" /> |
|||
<PackageReference Include="Volo.Abp.Authorization.Abstractions" Version="5.0.1" /> |
|||
<PackageReference Include="xunit" Version="2.4.1" /> |
|||
<PackageReference Include="xunit.runner.visualstudio" Version="2.4.3"> |
|||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> |
|||
<PrivateAssets>all</PrivateAssets> |
|||
</PackageReference> |
|||
<PackageReference Include="coverlet.collector" Version="3.1.0"> |
|||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> |
|||
<PrivateAssets>all</PrivateAssets> |
|||
</PackageReference> |
|||
</ItemGroup> |
|||
|
|||
<ItemGroup> |
|||
<ProjectReference Include="..\..\src\BookStore.Blazor\BookStore.Blazor.csproj" /> |
|||
<ProjectReference Include="..\BookStore.EntityFrameworkCore.Tests\BookStore.EntityFrameworkCore.Tests.csproj" /> |
|||
</ItemGroup> |
|||
|
|||
</Project> |
|||
``` |
|||
|
|||
Create `BookStoreBlazorTestModule` that depends on `AbpAspNetCoreComponentsModule` and `BookStoreEntityFrameworkCoreTestModule`. |
|||
|
|||
```cs |
|||
[DependsOn( |
|||
typeof(AbpAspNetCoreComponentsModule), |
|||
typeof(BookStoreEntityFrameworkCoreTestModule) |
|||
)] |
|||
public class BookStoreBlazorTestModule : AbpModule |
|||
{ |
|||
|
|||
} |
|||
``` |
|||
|
|||
Create a `BookStoreBlazorTestBase` class and add the `CreateTestContext` method. The `CreateTestContext` have key code. |
|||
|
|||
It uses ABP's `ServiceProvider` as a fallback `ServiceProvider` and add all ABP's services to the `TestContext`. |
|||
|
|||
```cs |
|||
public abstract class BookStoreBlazorTestBase : BookStoreTestBase<BookStoreBlazorTestModule> |
|||
{ |
|||
protected virtual TestContext CreateTestContext() |
|||
{ |
|||
var testContext = new TestContext(); |
|||
testContext.Services.AddFallbackServiceProvider(ServiceProvider); |
|||
foreach (var service in ServiceProvider.GetRequiredService<IAbpApplicationWithExternalServiceProvider>().Services) |
|||
{ |
|||
testContext.Services.Add(service); |
|||
} |
|||
testContext.Services.AddBlazorise().AddBootstrap5Providers().AddFontAwesomeIcons(); |
|||
return testContext; |
|||
} |
|||
} |
|||
``` |
|||
|
|||
Finally, we add an `Index_Tests` class to test the `Index` component. |
|||
|
|||
```cs |
|||
public class Index_Tests : BookStoreBlazorTestBase |
|||
{ |
|||
[Fact] |
|||
public void Index_Test() |
|||
{ |
|||
using (var ctx = CreateTestContext()) |
|||
{ |
|||
// Act |
|||
var cut = ctx.RenderComponent<BookStore.Blazor.Pages.Index>(); |
|||
|
|||
// Assert |
|||
cut.Find(".lead").InnerHtml.Contains("Welcome to the application. This is a startup project based on the ABP framework. For more information, visit abp.io.").ShouldBeTrue(); |
|||
|
|||
cut.Find("#username").InnerHtml.Contains("Welcome admin").ShouldBeTrue(); |
|||
} |
|||
} |
|||
} |
|||
``` |
|||
|
|||
## Reference document |
|||
|
|||
https://github.com/bUnit-dev/bUnit |
|||
|
|||
https://docs.microsoft.com/en-us/aspnet/core/blazor/test |
|||
File diff suppressed because it is too large
|
After Width: | Height: | Size: 82 KiB |
|
After Width: | Height: | Size: 32 KiB |
|
After Width: | Height: | Size: 36 KiB |
|
After Width: | Height: | Size: 38 KiB |
@ -0,0 +1,52 @@ |
|||
using System; |
|||
using System.Collections.Concurrent; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.DependencyInjection; |
|||
using Volo.Abp.EventBus.Distributed; |
|||
|
|||
namespace Volo.Abp.EventBus; |
|||
|
|||
public class EventHandlerInvoker : IEventHandlerInvoker, ISingletonDependency |
|||
{ |
|||
private readonly ConcurrentDictionary<string, EventHandlerInvokerCacheItem> _cache; |
|||
|
|||
public EventHandlerInvoker() |
|||
{ |
|||
_cache = new ConcurrentDictionary<string, EventHandlerInvokerCacheItem>(); |
|||
} |
|||
|
|||
public async Task InvokeAsync(IEventHandler eventHandler, object eventData, Type eventType) |
|||
{ |
|||
var cacheItem = _cache.GetOrAdd($"{eventHandler.GetType().FullName}-{eventType.FullName}", _ => |
|||
{ |
|||
var item = new EventHandlerInvokerCacheItem(); |
|||
|
|||
if (typeof(ILocalEventHandler<>).MakeGenericType(eventType).IsInstanceOfType(eventHandler)) |
|||
{ |
|||
item.Local = (IEventHandlerMethodExecutor)Activator.CreateInstance(typeof(LocalEventHandlerMethodExecutor<>).MakeGenericType(eventType)); |
|||
} |
|||
|
|||
if (typeof(IDistributedEventHandler<>).MakeGenericType(eventType).IsInstanceOfType(eventHandler)) |
|||
{ |
|||
item.Distributed = (IEventHandlerMethodExecutor)Activator.CreateInstance(typeof(DistributedEventHandlerMethodExecutor<>).MakeGenericType(eventType)); |
|||
} |
|||
|
|||
return item; |
|||
}); |
|||
|
|||
if (cacheItem.Local != null) |
|||
{ |
|||
await cacheItem.Local.ExecutorAsync(eventHandler, eventData); |
|||
} |
|||
|
|||
if (cacheItem.Distributed != null) |
|||
{ |
|||
await cacheItem.Distributed.ExecutorAsync(eventHandler, eventData); |
|||
} |
|||
|
|||
if (cacheItem.Local == null && cacheItem.Distributed == null) |
|||
{ |
|||
throw new AbpException("The object instance is not an event handler. Object type: " + eventHandler.GetType().AssemblyQualifiedName); |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,8 @@ |
|||
namespace Volo.Abp.EventBus; |
|||
|
|||
public class EventHandlerInvokerCacheItem |
|||
{ |
|||
public IEventHandlerMethodExecutor Local { get; set; } |
|||
|
|||
public IEventHandlerMethodExecutor Distributed { get; set; } |
|||
} |
|||
@ -0,0 +1,34 @@ |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
using Volo.Abp.EventBus.Distributed; |
|||
|
|||
namespace Volo.Abp.EventBus; |
|||
|
|||
public delegate Task EventHandlerMethodExecutorAsync(IEventHandler target, object parameter); |
|||
|
|||
public interface IEventHandlerMethodExecutor |
|||
{ |
|||
EventHandlerMethodExecutorAsync ExecutorAsync { get; } |
|||
} |
|||
|
|||
public class LocalEventHandlerMethodExecutor<TEvent> : IEventHandlerMethodExecutor |
|||
where TEvent : class |
|||
{ |
|||
public EventHandlerMethodExecutorAsync ExecutorAsync => (target, parameter) => target.As<ILocalEventHandler<TEvent>>().HandleEventAsync(parameter.As<TEvent>()); |
|||
|
|||
public Task ExecuteAsync(IEventHandler target, TEvent parameters) |
|||
{ |
|||
return ExecutorAsync(target, parameters); |
|||
} |
|||
} |
|||
|
|||
public class DistributedEventHandlerMethodExecutor<TEvent> : IEventHandlerMethodExecutor |
|||
where TEvent : class |
|||
{ |
|||
public EventHandlerMethodExecutorAsync ExecutorAsync => (target, parameter) => target.As<IDistributedEventHandler<TEvent>>().HandleEventAsync(parameter.As<TEvent>()); |
|||
|
|||
public Task ExecuteAsync(IEventHandler target, TEvent parameters) |
|||
{ |
|||
return ExecutorAsync(target, parameters); |
|||
} |
|||
} |
|||
@ -0,0 +1,9 @@ |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
|
|||
namespace Volo.Abp.EventBus; |
|||
|
|||
public interface IEventHandlerInvoker |
|||
{ |
|||
Task InvokeAsync(IEventHandler eventHandler, object eventData, Type eventType); |
|||
} |
|||
@ -0,0 +1,128 @@ |
|||
using System; |
|||
using System.Threading.Tasks; |
|||
using Shouldly; |
|||
using Volo.Abp.Domain.Entities; |
|||
using Volo.Abp.Domain.Entities.Events; |
|||
using Volo.Abp.Domain.Entities.Events.Distributed; |
|||
using Volo.Abp.EventBus.Distributed; |
|||
using Volo.Abp.EventBus.Local; |
|||
using Xunit; |
|||
|
|||
namespace Volo.Abp.EventBus; |
|||
|
|||
public class EventHandlerInvoker_Tests : EventBusTestBase |
|||
{ |
|||
private readonly IEventHandlerInvoker _eventHandlerInvoker; |
|||
|
|||
public EventHandlerInvoker_Tests() |
|||
{ |
|||
_eventHandlerInvoker = GetRequiredService<IEventHandlerInvoker>(); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Invoke_LocalEventHandler_With_MyEventData() |
|||
{ |
|||
var localHandler = new MyLocalEventHandler(); |
|||
var eventData = new MyEventData(); |
|||
|
|||
await _eventHandlerInvoker.InvokeAsync(localHandler, eventData, eventData.GetType()); |
|||
|
|||
localHandler.MyEventDataCount.ShouldBe(2); |
|||
localHandler.EntityChangedEventDataCount.ShouldBe(0); |
|||
localHandler.EntityChangedEventDataCount.ShouldBe(0); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Invoke_LocalEventHandler_Created_And_Changed_Once() |
|||
{ |
|||
var localHandler = new MyLocalEventHandler(); |
|||
var eventData = new EntityCreatedEventData<MyEntity>(new MyEntity()); |
|||
|
|||
await _eventHandlerInvoker.InvokeAsync(localHandler, eventData, eventData.GetType()); |
|||
await _eventHandlerInvoker.InvokeAsync(localHandler, eventData, typeof(EntityChangedEventData<MyEntity>)); |
|||
|
|||
localHandler.MyEventDataCount.ShouldBe(0); |
|||
localHandler.EntityChangedEventDataCount.ShouldBe(1); |
|||
localHandler.EntityChangedEventDataCount.ShouldBe(1); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Invoke_DistributedEventHandler_With_MyEventData() |
|||
{ |
|||
var localHandler = new MyDistributedEventHandler(); |
|||
var eventData = new MyEventData(); |
|||
|
|||
await _eventHandlerInvoker.InvokeAsync(localHandler, eventData, eventData.GetType()); |
|||
|
|||
localHandler.MyEventDataCount.ShouldBe(1); |
|||
localHandler.EntityCreatedCount.ShouldBe(0); |
|||
} |
|||
|
|||
[Fact] |
|||
public async Task Should_Invoke_DistributedEventHandler_With_EntityCreatedEto() |
|||
{ |
|||
var localHandler = new MyDistributedEventHandler(); |
|||
var eventData = new EntityCreatedEto<MyEntity>(new MyEntity()); |
|||
|
|||
await _eventHandlerInvoker.InvokeAsync(localHandler, eventData, eventData.GetType()); |
|||
|
|||
localHandler.MyEventDataCount.ShouldBe(0); |
|||
localHandler.EntityCreatedCount.ShouldBe(1); |
|||
} |
|||
|
|||
public class MyEventData |
|||
{ |
|||
} |
|||
|
|||
public class MyEntity : Entity<Guid> |
|||
{ |
|||
|
|||
} |
|||
|
|||
public class MyDistributedEventHandler : IDistributedEventHandler<MyEventData>, |
|||
IDistributedEventHandler<EntityCreatedEto<MyEntity>> |
|||
{ |
|||
public int MyEventDataCount { get; set; } |
|||
public int EntityCreatedCount { get; set; } |
|||
|
|||
public Task HandleEventAsync(MyEventData eventData) |
|||
{ |
|||
MyEventDataCount++; |
|||
return Task.CompletedTask; |
|||
} |
|||
|
|||
public Task HandleEventAsync(EntityCreatedEto<MyEntity> eventData) |
|||
{ |
|||
EntityCreatedCount++; |
|||
return Task.CompletedTask; |
|||
} |
|||
} |
|||
|
|||
public class MyLocalEventHandler : ILocalEventHandler<MyEventData>, |
|||
IDistributedEventHandler<MyEventData>, |
|||
IDistributedEventHandler<EntityCreatedEventData<MyEntity>>, |
|||
IDistributedEventHandler<EntityChangedEventData<MyEntity>> |
|||
{ |
|||
public int MyEventDataCount { get; set; } |
|||
public int EntityCreatedEventDataCount { get; set; } |
|||
public int EntityChangedEventDataCount { get; set; } |
|||
|
|||
public Task HandleEventAsync(MyEventData eventData) |
|||
{ |
|||
MyEventDataCount++; |
|||
return Task.CompletedTask; |
|||
} |
|||
|
|||
public Task HandleEventAsync(EntityCreatedEventData<MyEntity> eventData) |
|||
{ |
|||
EntityCreatedEventDataCount++; |
|||
return Task.CompletedTask; |
|||
} |
|||
|
|||
public Task HandleEventAsync(EntityChangedEventData<MyEntity> eventData) |
|||
{ |
|||
EntityChangedEventDataCount++; |
|||
return Task.CompletedTask; |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
{ |
|||
"name": "Volo.Abp.Account.Application.Contracts", |
|||
"hash": "eda5b3412f7e1dd8dc07761a04f3a064", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Abp.Account", |
|||
"contentType": "abpModule", |
|||
"name": "AbpAccountApplicationContractsModule" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1,49 @@ |
|||
{ |
|||
"name": "Volo.Abp.Account.Application", |
|||
"hash": "7fb9c3f35b18f2e9a0577d571fccf9df", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Abp.Account", |
|||
"contentType": "abpModule", |
|||
"name": "AbpAccountApplicationModule" |
|||
}, |
|||
{ |
|||
"namespace": "Volo.Abp.Account", |
|||
"summary": null, |
|||
"implementingInterfaces": [ |
|||
"Volo.Abp.Account.IAccountAppService" |
|||
], |
|||
"contentType": "applicationService", |
|||
"name": "AccountAppService" |
|||
}, |
|||
{ |
|||
"namespace": "Volo.Abp.Account", |
|||
"summary": null, |
|||
"implementingInterfaces": [ |
|||
"Volo.Abp.Account.IProfileAppService" |
|||
], |
|||
"contentType": "applicationService", |
|||
"name": "ProfileAppService" |
|||
}, |
|||
{ |
|||
"defaultValue": "true", |
|||
"displayName": "Is self-registration enabled", |
|||
"description": "Whether a user can register the account by him or herself.", |
|||
"isVisibleToClient": true, |
|||
"isInherited": true, |
|||
"isEncrypted": false, |
|||
"contentType": "setting", |
|||
"name": "Abp.Account.IsSelfRegistrationEnabled" |
|||
}, |
|||
{ |
|||
"defaultValue": "true", |
|||
"displayName": "Authenticate with a local account", |
|||
"description": "Indicates if the server will allow users to authenticate with a local account.", |
|||
"isVisibleToClient": true, |
|||
"isInherited": true, |
|||
"isEncrypted": false, |
|||
"contentType": "setting", |
|||
"name": "Abp.Account.EnableLocalLogin" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
{ |
|||
"name": "Volo.Abp.Account.HttpApi.Client", |
|||
"hash": "ca67872e6cd8c25508461f7d171a8f04", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Abp.Account", |
|||
"contentType": "abpModule", |
|||
"name": "AbpAccountHttpApiClientModule" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
{ |
|||
"name": "Volo.Abp.Account.HttpApi", |
|||
"hash": "b178895fe2a7f470f36c4fd121b7c07a", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Abp.Account", |
|||
"contentType": "abpModule", |
|||
"name": "AbpAccountHttpApiModule" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1 @@ |
|||
{} |
|||
@ -0,0 +1,11 @@ |
|||
{ |
|||
"name": "Volo.Abp.Account.Web", |
|||
"hash": "5fb2aa05261d4febe7ea7083d80fea74", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Abp.Account.Web", |
|||
"contentType": "abpModule", |
|||
"name": "AbpAccountWebModule" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
{ |
|||
"name": "Volo.Abp.AuditLogging.Domain.Shared", |
|||
"hash": "91305b5b9fa1cd0a8a9adc6a0e54877b", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Abp.AuditLogging", |
|||
"contentType": "abpModule", |
|||
"name": "AbpAuditLoggingDomainSharedModule" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1,41 @@ |
|||
{ |
|||
"name": "Volo.Abp.AuditLogging.Domain", |
|||
"hash": "df19d27b7da103de2da1826c6ba8e161", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Abp.AuditLogging", |
|||
"contentType": "abpModule", |
|||
"name": "AbpAuditLoggingDomainModule" |
|||
}, |
|||
{ |
|||
"namespace": "Volo.Abp.AuditLogging", |
|||
"primaryKeyType": "Guid", |
|||
"summary": null, |
|||
"collectionProperties": [ |
|||
"Volo.Abp.AuditLogging.EntityChange", |
|||
"Volo.Abp.AuditLogging.AuditLogAction" |
|||
], |
|||
"navigationProperties": [], |
|||
"contentType": "aggregateRoot", |
|||
"name": "AuditLog" |
|||
}, |
|||
{ |
|||
"namespace": "Volo.Abp.AuditLogging", |
|||
"summary": null, |
|||
"entityModel": { |
|||
"namespace": "Volo.Abp.AuditLogging", |
|||
"primaryKeyType": "Guid", |
|||
"summary": null, |
|||
"collectionProperties": [ |
|||
"Volo.Abp.AuditLogging.EntityChange", |
|||
"Volo.Abp.AuditLogging.AuditLogAction" |
|||
], |
|||
"navigationProperties": [], |
|||
"contentType": "entity", |
|||
"name": "AuditLog" |
|||
}, |
|||
"contentType": "repositoryInterface", |
|||
"name": "IAuditLogRepository" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1,39 @@ |
|||
{ |
|||
"name": "Volo.Abp.AuditLogging.EntityFrameworkCore", |
|||
"hash": "0495e8cfba68a55319b3774882939845", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Abp.AuditLogging.EntityFrameworkCore", |
|||
"contentType": "abpModule", |
|||
"name": "AbpAuditLoggingEntityFrameworkCoreModule" |
|||
}, |
|||
{ |
|||
"namespace": "Volo.Abp.AuditLogging.EntityFrameworkCore", |
|||
"connectionStringName": "AbpAuditLogging", |
|||
"databaseTables": [ |
|||
{ |
|||
"entityFullName": "Volo.Abp.AuditLogging.AuditLog", |
|||
"contentType": "databaseTable", |
|||
"name": "AbpAuditLogs" |
|||
}, |
|||
{ |
|||
"entityFullName": "Volo.Abp.AuditLogging.AuditLogAction", |
|||
"contentType": "databaseTable", |
|||
"name": "AbpAuditLogActions" |
|||
}, |
|||
{ |
|||
"entityFullName": "Volo.Abp.AuditLogging.EntityChange", |
|||
"contentType": "databaseTable", |
|||
"name": "AbpEntityChanges" |
|||
}, |
|||
{ |
|||
"entityFullName": "Volo.Abp.AuditLogging.EntityPropertyChange", |
|||
"contentType": "databaseTable", |
|||
"name": "AbpEntityPropertyChanges" |
|||
} |
|||
], |
|||
"contentType": "efCoreDbContext", |
|||
"name": "AbpAuditLoggingDbContext" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1 @@ |
|||
{} |
|||
@ -0,0 +1,24 @@ |
|||
{ |
|||
"name": "Volo.Abp.AuditLogging.MongoDB", |
|||
"hash": "e87142d2a7e24741c98d02daa9005ac1", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Abp.AuditLogging.MongoDB", |
|||
"contentType": "abpModule", |
|||
"name": "AbpAuditLoggingMongoDbModule" |
|||
}, |
|||
{ |
|||
"namespace": "Volo.Abp.AuditLogging.MongoDB", |
|||
"connectionStringName": "AbpAuditLogging", |
|||
"databaseCollections": [ |
|||
{ |
|||
"entityFullName": "Volo.Abp.AuditLogging.AuditLog", |
|||
"contentType": "databaseCollection", |
|||
"name": "AbpAuditLogs" |
|||
} |
|||
], |
|||
"contentType": "mongoDbContext", |
|||
"name": "AuditLoggingMongoDbContext" |
|||
} |
|||
] |
|||
} |
|||
@ -1 +1,3 @@ |
|||
{} |
|||
{ |
|||
"role": "lib.test" |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
{ |
|||
"name": "Volo.Abp.BackgroundJobs.Domain.Shared", |
|||
"hash": "d48277ec610b23392edcb12ae3e29175", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Abp.BackgroundJobs", |
|||
"contentType": "abpModule", |
|||
"name": "AbpBackgroundJobsDomainSharedModule" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1,35 @@ |
|||
{ |
|||
"name": "Volo.Abp.BackgroundJobs.Domain", |
|||
"hash": "1398bbe3f228b2bfd0baec6a64c03b43", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Abp.BackgroundJobs", |
|||
"contentType": "abpModule", |
|||
"name": "AbpBackgroundJobsDomainModule" |
|||
}, |
|||
{ |
|||
"namespace": "Volo.Abp.BackgroundJobs", |
|||
"primaryKeyType": "Guid", |
|||
"summary": null, |
|||
"collectionProperties": [], |
|||
"navigationProperties": [], |
|||
"contentType": "aggregateRoot", |
|||
"name": "BackgroundJobRecord" |
|||
}, |
|||
{ |
|||
"namespace": "Volo.Abp.BackgroundJobs", |
|||
"summary": null, |
|||
"entityModel": { |
|||
"namespace": "Volo.Abp.BackgroundJobs", |
|||
"primaryKeyType": "Guid", |
|||
"summary": null, |
|||
"collectionProperties": [], |
|||
"navigationProperties": [], |
|||
"contentType": "entity", |
|||
"name": "BackgroundJobRecord" |
|||
}, |
|||
"contentType": "repositoryInterface", |
|||
"name": "IBackgroundJobRepository" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1,24 @@ |
|||
{ |
|||
"name": "Volo.Abp.BackgroundJobs.EntityFrameworkCore", |
|||
"hash": "f3bf7c7db2ab764d6421df0b88ea535b", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Abp.BackgroundJobs.EntityFrameworkCore", |
|||
"contentType": "abpModule", |
|||
"name": "AbpBackgroundJobsEntityFrameworkCoreModule" |
|||
}, |
|||
{ |
|||
"namespace": "Volo.Abp.BackgroundJobs.EntityFrameworkCore", |
|||
"connectionStringName": "AbpBackgroundJobs", |
|||
"databaseTables": [ |
|||
{ |
|||
"entityFullName": "Volo.Abp.BackgroundJobs.BackgroundJobRecord", |
|||
"contentType": "databaseTable", |
|||
"name": "AbpBackgroundJobs" |
|||
} |
|||
], |
|||
"contentType": "efCoreDbContext", |
|||
"name": "BackgroundJobsDbContext" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1 @@ |
|||
{} |
|||
@ -0,0 +1,24 @@ |
|||
{ |
|||
"name": "Volo.Abp.BackgroundJobs.MongoDB", |
|||
"hash": "def047f007cc2f8c9a74459f1df01330", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Abp.BackgroundJobs.MongoDB", |
|||
"contentType": "abpModule", |
|||
"name": "AbpBackgroundJobsMongoDbModule" |
|||
}, |
|||
{ |
|||
"namespace": "Volo.Abp.BackgroundJobs.MongoDB", |
|||
"connectionStringName": "AbpBackgroundJobs", |
|||
"databaseCollections": [ |
|||
{ |
|||
"entityFullName": "Volo.Abp.BackgroundJobs.BackgroundJobRecord", |
|||
"contentType": "databaseCollection", |
|||
"name": "AbpBackgroundJobs" |
|||
} |
|||
], |
|||
"contentType": "mongoDbContext", |
|||
"name": "BackgroundJobsMongoDbContext" |
|||
} |
|||
] |
|||
} |
|||
@ -1 +1,3 @@ |
|||
{} |
|||
{ |
|||
"role": "lib.test" |
|||
} |
|||
@ -0,0 +1 @@ |
|||
{} |
|||
@ -0,0 +1,11 @@ |
|||
{ |
|||
"name": "Volo.Abp.BlobStoring.Database.Domain.Shared", |
|||
"hash": "eed9ff456824aac8ba0fe73baa6cf288", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Abp.BlobStoring.Database", |
|||
"contentType": "abpModule", |
|||
"name": "BlobStoringDatabaseDomainSharedModule" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1,59 @@ |
|||
{ |
|||
"name": "Volo.Abp.BlobStoring.Database.Domain", |
|||
"hash": "744c78df1c9addf5e9f6657295f0529c", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Abp.BlobStoring.Database", |
|||
"contentType": "abpModule", |
|||
"name": "BlobStoringDatabaseDomainModule" |
|||
}, |
|||
{ |
|||
"namespace": "Volo.Abp.BlobStoring.Database", |
|||
"primaryKeyType": "Guid", |
|||
"summary": null, |
|||
"collectionProperties": [], |
|||
"navigationProperties": [], |
|||
"contentType": "aggregateRoot", |
|||
"name": "DatabaseBlob" |
|||
}, |
|||
{ |
|||
"namespace": "Volo.Abp.BlobStoring.Database", |
|||
"primaryKeyType": "Guid", |
|||
"summary": null, |
|||
"collectionProperties": [], |
|||
"navigationProperties": [], |
|||
"contentType": "aggregateRoot", |
|||
"name": "DatabaseBlobContainer" |
|||
}, |
|||
{ |
|||
"namespace": "Volo.Abp.BlobStoring.Database", |
|||
"summary": null, |
|||
"entityModel": { |
|||
"namespace": "Volo.Abp.BlobStoring.Database", |
|||
"primaryKeyType": "Guid", |
|||
"summary": null, |
|||
"collectionProperties": [], |
|||
"navigationProperties": [], |
|||
"contentType": "entity", |
|||
"name": "DatabaseBlobContainer" |
|||
}, |
|||
"contentType": "repositoryInterface", |
|||
"name": "IDatabaseBlobContainerRepository" |
|||
}, |
|||
{ |
|||
"namespace": "Volo.Abp.BlobStoring.Database", |
|||
"summary": null, |
|||
"entityModel": { |
|||
"namespace": "Volo.Abp.BlobStoring.Database", |
|||
"primaryKeyType": "Guid", |
|||
"summary": null, |
|||
"collectionProperties": [], |
|||
"navigationProperties": [], |
|||
"contentType": "entity", |
|||
"name": "DatabaseBlob" |
|||
}, |
|||
"contentType": "repositoryInterface", |
|||
"name": "IDatabaseBlobRepository" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1,29 @@ |
|||
{ |
|||
"name": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore", |
|||
"hash": "91e3a724f35375f79d9505ca0e950b9e", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore", |
|||
"contentType": "abpModule", |
|||
"name": "BlobStoringDatabaseEntityFrameworkCoreModule" |
|||
}, |
|||
{ |
|||
"namespace": "Volo.Abp.BlobStoring.Database.EntityFrameworkCore", |
|||
"connectionStringName": "AbpBlobStoring", |
|||
"databaseTables": [ |
|||
{ |
|||
"entityFullName": "Volo.Abp.BlobStoring.Database.DatabaseBlob", |
|||
"contentType": "databaseTable", |
|||
"name": "AbpBlobs" |
|||
}, |
|||
{ |
|||
"entityFullName": "Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", |
|||
"contentType": "databaseTable", |
|||
"name": "AbpBlobContainers" |
|||
} |
|||
], |
|||
"contentType": "efCoreDbContext", |
|||
"name": "BlobStoringDbContext" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1 @@ |
|||
{} |
|||
@ -0,0 +1,29 @@ |
|||
{ |
|||
"name": "Volo.Abp.BlobStoring.Database.MongoDB", |
|||
"hash": "4c911e5e8a2e8c4630d12f394a157819", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Abp.BlobStoring.Database.MongoDB", |
|||
"contentType": "abpModule", |
|||
"name": "BlobStoringDatabaseMongoDbModule" |
|||
}, |
|||
{ |
|||
"namespace": "Volo.Abp.BlobStoring.Database.MongoDB", |
|||
"connectionStringName": "AbpBlobStoring", |
|||
"databaseCollections": [ |
|||
{ |
|||
"entityFullName": "Volo.Abp.BlobStoring.Database.DatabaseBlobContainer", |
|||
"contentType": "databaseCollection", |
|||
"name": "AbpBlobContainers" |
|||
}, |
|||
{ |
|||
"entityFullName": "Volo.Abp.BlobStoring.Database.DatabaseBlob", |
|||
"contentType": "databaseCollection", |
|||
"name": "AbpBlobs" |
|||
} |
|||
], |
|||
"contentType": "mongoDbContext", |
|||
"name": "BlobStoringMongoDbContext" |
|||
} |
|||
] |
|||
} |
|||
@ -1 +1,3 @@ |
|||
{} |
|||
{ |
|||
"role": "lib.test" |
|||
} |
|||
@ -0,0 +1,103 @@ |
|||
{ |
|||
"folders": { |
|||
"items": { |
|||
"src": {}, |
|||
"app": {}, |
|||
"test": {} |
|||
} |
|||
}, |
|||
"packages": { |
|||
"Volo.Blogging.Domain.Shared": { |
|||
"path": "src/Volo.Blogging.Domain.Shared/Volo.Blogging.Domain.Shared.abppkg.json", |
|||
"folder": "src" |
|||
}, |
|||
"Volo.Blogging.Domain": { |
|||
"path": "src/Volo.Blogging.Domain/Volo.Blogging.Domain.abppkg.json", |
|||
"folder": "src" |
|||
}, |
|||
"Volo.Blogging.Application.Contracts": { |
|||
"path": "src/Volo.Blogging.Application.Contracts/Volo.Blogging.Application.Contracts.abppkg.json", |
|||
"folder": "src" |
|||
}, |
|||
"Volo.Blogging.Application": { |
|||
"path": "src/Volo.Blogging.Application/Volo.Blogging.Application.abppkg.json", |
|||
"folder": "src" |
|||
}, |
|||
"Volo.Blogging.EntityFrameworkCore": { |
|||
"path": "src/Volo.Blogging.EntityFrameworkCore/Volo.Blogging.EntityFrameworkCore.abppkg.json", |
|||
"folder": "src" |
|||
}, |
|||
"Volo.Blogging.HttpApi": { |
|||
"path": "src/Volo.Blogging.HttpApi/Volo.Blogging.HttpApi.abppkg.json", |
|||
"folder": "src" |
|||
}, |
|||
"Volo.Blogging.HttpApi.Client": { |
|||
"path": "src/Volo.Blogging.HttpApi.Client/Volo.Blogging.HttpApi.Client.abppkg.json", |
|||
"folder": "src" |
|||
}, |
|||
"Volo.Blogging.Web": { |
|||
"path": "src/Volo.Blogging.Web/Volo.Blogging.Web.abppkg.json", |
|||
"folder": "src" |
|||
}, |
|||
"Volo.BloggingTestApp.EntityFrameworkCore": { |
|||
"path": "app/Volo.BloggingTestApp.EntityFrameworkCore/Volo.BloggingTestApp.EntityFrameworkCore.abppkg.json", |
|||
"folder": "app" |
|||
}, |
|||
"Volo.BloggingTestApp": { |
|||
"path": "app/Volo.BloggingTestApp/Volo.BloggingTestApp.abppkg.json", |
|||
"folder": "app" |
|||
}, |
|||
"Volo.Blogging.TestBase": { |
|||
"path": "test/Volo.Blogging.TestBase/Volo.Blogging.TestBase.abppkg.json", |
|||
"folder": "test" |
|||
}, |
|||
"Volo.Blogging.EntityFrameworkCore.Tests": { |
|||
"path": "test/Volo.Blogging.EntityFrameworkCore.Tests/Volo.Blogging.EntityFrameworkCore.Tests.abppkg.json", |
|||
"folder": "test" |
|||
}, |
|||
"Volo.Blogging.Application.Tests": { |
|||
"path": "test/Volo.Blogging.Application.Tests/Volo.Blogging.Application.Tests.abppkg.json", |
|||
"folder": "test" |
|||
}, |
|||
"Volo.Blogging.MongoDB": { |
|||
"path": "src/Volo.Blogging.MongoDB/Volo.Blogging.MongoDB.abppkg.json", |
|||
"folder": "src" |
|||
}, |
|||
"Volo.BloggingTestApp.MongoDB": { |
|||
"path": "app/Volo.BloggingTestApp.MongoDB/Volo.BloggingTestApp.MongoDB.abppkg.json", |
|||
"folder": "app" |
|||
}, |
|||
"Volo.Blogging.MongoDB.Tests": { |
|||
"path": "test/Volo.Blogging.MongoDB.Tests/Volo.Blogging.MongoDB.Tests.abppkg.json", |
|||
"folder": "test" |
|||
}, |
|||
"Volo.Blogging.Domain.Tests": { |
|||
"path": "test/Volo.Blogging.Domain.Tests/Volo.Blogging.Domain.Tests.abppkg.json", |
|||
"folder": "test" |
|||
}, |
|||
"Volo.Blogging.Admin.Application.Contracts": { |
|||
"path": "src/Volo.Blogging.Admin.Application.Contracts/Volo.Blogging.Admin.Application.Contracts.abppkg.json", |
|||
"folder": "src" |
|||
}, |
|||
"Volo.Blogging.Admin.Application": { |
|||
"path": "src/Volo.Blogging.Admin.Application/Volo.Blogging.Admin.Application.abppkg.json", |
|||
"folder": "src" |
|||
}, |
|||
"Volo.Blogging.Admin.HttpApi": { |
|||
"path": "src/Volo.Blogging.Admin.HttpApi/Volo.Blogging.Admin.HttpApi.abppkg.json", |
|||
"folder": "src" |
|||
}, |
|||
"Volo.Blogging.Admin.HttpApi.Client": { |
|||
"path": "src/Volo.Blogging.Admin.HttpApi.Client/Volo.Blogging.Admin.HttpApi.Client.abppkg.json", |
|||
"folder": "src" |
|||
}, |
|||
"Volo.Blogging.Admin.Web": { |
|||
"path": "src/Volo.Blogging.Admin.Web/Volo.Blogging.Admin.Web.abppkg.json", |
|||
"folder": "src" |
|||
}, |
|||
"Volo.Blogging.Application.Contracts.Shared": { |
|||
"path": "src/Volo.Blogging.Application.Contracts.Shared/Volo.Blogging.Application.Contracts.Shared.abppkg.json", |
|||
"folder": "src" |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,7 @@ |
|||
{ |
|||
"modules": { |
|||
"Volo.Blogging": { |
|||
"path": "Volo.Blogging.abpmdl.json" |
|||
} |
|||
} |
|||
} |
|||
@ -0,0 +1,3 @@ |
|||
{ |
|||
"role": "lib.ef" |
|||
} |
|||
@ -0,0 +1,3 @@ |
|||
{ |
|||
"role": "lib.mongodb" |
|||
} |
|||
@ -0,0 +1,3 @@ |
|||
{ |
|||
"role": "lib.test" |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
{ |
|||
"name": "Volo.Blogging.Admin.Application.Contracts", |
|||
"hash": "bc5b2c34e2c42cadb2a10a82348aa2b7", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Blogging.Admin", |
|||
"contentType": "abpModule", |
|||
"name": "BloggingAdminApplicationContractsModule" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1,3 @@ |
|||
{ |
|||
"role": "lib.application-contracts" |
|||
} |
|||
@ -0,0 +1,20 @@ |
|||
{ |
|||
"name": "Volo.Blogging.Admin.Application", |
|||
"hash": "7b36c95fbcf2605d9ea2614cba9ed2b6", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Blogging.Admin", |
|||
"contentType": "abpModule", |
|||
"name": "BloggingAdminApplicationModule" |
|||
}, |
|||
{ |
|||
"namespace": "Volo.Blogging.Admin.Blogs", |
|||
"summary": null, |
|||
"implementingInterfaces": [ |
|||
"Volo.Blogging.Admin.Blogs.IBlogManagementAppService" |
|||
], |
|||
"contentType": "applicationService", |
|||
"name": "BlogManagementAppService" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1,3 @@ |
|||
{ |
|||
"role": "lib.application" |
|||
} |
|||
@ -0,0 +1,3 @@ |
|||
{ |
|||
"role": "lib.http-api-client" |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
{ |
|||
"name": "Volo.Blogging.Admin.HttpApi", |
|||
"hash": "4397a28b60e20715a0d7559a882c7070", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Blogging.Admin", |
|||
"contentType": "abpModule", |
|||
"name": "BloggingAdminHttpApiModule" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1,3 @@ |
|||
{ |
|||
"role": "lib.http-api" |
|||
} |
|||
@ -0,0 +1,11 @@ |
|||
{ |
|||
"name": "Volo.Blogging.Admin.Web", |
|||
"hash": "faf036383d0b2be635023b8f9627038d", |
|||
"contents": [ |
|||
{ |
|||
"namespace": "Volo.Blogging.Admin", |
|||
"contentType": "abpModule", |
|||
"name": "BloggingAdminWebModule" |
|||
} |
|||
] |
|||
} |
|||
@ -0,0 +1,3 @@ |
|||
{ |
|||
"role": "lib.mvc" |
|||
} |
|||
@ -0,0 +1 @@ |
|||
{} |
|||
Some files were not shown because too many files changed in this diff
Loading…
Reference in new issue