Compare commits

..

No commits in common. "main" and "8.0.0-preview.3" have entirely different histories.

20 changed files with 86 additions and 305 deletions

BIN
.DS_Store vendored

Binary file not shown.

View File

@ -1,38 +0,0 @@
# This workflow will build a .NET project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net
name: Publish NuGets
on:
release:
types:
- published
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Extract Release Version
id: extract_version
run: echo "RELEASE_VERSION=${{ github.event.release.tag_name }}" >> $GITHUB_ENV
- name: Debug Release Version
run: echo "RELEASE_VERSION=${{ env.RELEASE_VERSION }}"
- name: Setup .NET
uses: actions/setup-dotnet@v3
with:
dotnet-version: 8.x
- name: Restore dependencies
run: dotnet restore
- name: Build and Pack NuGet Package
run: dotnet pack -c Release -o ./artifacts -p:Version=${{ env.RELEASE_VERSION }}
- name: Publish to NuGet.org
run: |
dotnet nuget push ./artifacts/*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_API_KEY }}

View File

@ -31,8 +31,10 @@ jobs:
run: dotnet restore run: dotnet restore
- name: Build and Pack NuGet Package - name: Build and Pack NuGet Package
run: dotnet pack -c Release -o ./artifacts -p:Version=${{ env.RELEASE_VERSION }} run: dotnet pack -c Release -o ./artifacts
- name: Publish to NuGet.org - name: Publish to NuGet.org
run: | run: |
dotnet nuget push ./artifacts/*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_API_KEY }} dotnet nuget push ./artifacts/*.nupkg --source https://api.nuget.org/v3/index.json --api-key ${{ secrets.NUGET_API_KEY }}
env:
NUGET_VERSION: ${{ steps.extract_version.outputs.release_version }}

View File

@ -1,29 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>netstandard2.1</TargetFramework>
<IsAotCompatible>true</IsAotCompatible> <PackageIconUrl>https://avatars.githubusercontent.com/u/52874619?v=4</PackageIconUrl>
<Authors>David Lebee, Mathias Beaulieu-Duncan</Authors> <Authors>David Lebee, Mathias Beaulieu-Duncan</Authors>
<LangVersion>default</LangVersion> <LangVersion>default</LangVersion>
<Company>Open Harbor</Company>
<PackageIcon>icon.png</PackageIcon>
<PackageReadmeFile>README.md</PackageReadmeFile>
<RepositoryUrl>https://git.openharbor.io/Open-Harbor/dotnet-cqrs</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<DebugType>portable</DebugType>
<DebugSymbols>true</DebugSymbols>
<IncludeSymbols>true</IncludeSymbols>
<IncludeSource>true</IncludeSource>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<None Include="..\icon.png" Pack="true" PackagePath="" CopyToOutputDirectory="Always" />
<None Include="..\README.md" Pack="true" PackagePath="" CopyToOutputDirectory="Always" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0-rc.1.23419.4" /> <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="8.0.0-rc.1.23419.4" />
</ItemGroup> </ItemGroup>

View File

@ -1,12 +1,11 @@
using System.Diagnostics.CodeAnalysis; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using OpenHarbor.CQRS.Abstractions.Discovery; using OpenHarbor.CQRS.Abstractions.Discovery;
namespace OpenHarbor.CQRS.Abstractions; namespace OpenHarbor.CQRS.Abstractions;
public static class ServiceCollectionExtensions public static class ServiceCollectionExtensions
{ {
public static IServiceCollection AddQuery<TQuery, TQueryResult, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TQueryHandler>(this IServiceCollection services) public static IServiceCollection AddQuery<TQuery, TQueryResult, TQueryHandler>(this IServiceCollection services)
where TQuery : class where TQuery : class
where TQueryHandler : class, IQueryHandler<TQuery, TQueryResult> where TQueryHandler : class, IQueryHandler<TQuery, TQueryResult>
{ {
@ -20,7 +19,7 @@ public static class ServiceCollectionExtensions
return services; return services;
} }
public static IServiceCollection AddCommand<TCommand, TCommandResult, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TCommandHandler>(this IServiceCollection services) public static IServiceCollection AddCommand<TCommand, TCommandResult, TCommandHandler>(this IServiceCollection services)
where TCommand : class where TCommand : class
where TCommandHandler : class, ICommandHandler<TCommand, TCommandResult> where TCommandHandler : class, ICommandHandler<TCommand, TCommandResult>
{ {
@ -34,7 +33,7 @@ public static class ServiceCollectionExtensions
return services; return services;
} }
public static IServiceCollection AddCommand<TCommand, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TCommandHandler>(this IServiceCollection services) public static IServiceCollection AddCommand<TCommand, TCommandHandler>(this IServiceCollection services)
where TCommand : class where TCommand : class
where TCommandHandler : class, ICommandHandler<TCommand> where TCommandHandler : class, ICommandHandler<TCommand>
{ {

View File

@ -1,26 +1,8 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>netstandard2.1</TargetFramework>
<IsAotCompatible>true</IsAotCompatible> <PackageIconUrl>https://avatars.githubusercontent.com/u/52874619?v=4</PackageIconUrl>
<IsAotCompatible>false</IsAotCompatible> <Authors>David Lebee, Mathias Beaulieu-Duncan</Authors>
<LangVersion>default</LangVersion> <LangVersion>default</LangVersion>
<Company>Open Harbor</Company>
<PackageIcon>icon.png</PackageIcon>
<PackageReadmeFile>README.md</PackageReadmeFile>
<RepositoryUrl>https://git.openharbor.io/Open-Harbor/dotnet-cqrs</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<DebugType>portable</DebugType>
<DebugSymbols>true</DebugSymbols>
<IncludeSymbols>true</IncludeSymbols>
<IncludeSource>true</IncludeSource>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<None Include="..\icon.png" Pack="true" PackagePath="" CopyToOutputDirectory="Always" />
<None Include="..\README.md" Pack="true" PackagePath="" CopyToOutputDirectory="Always" />
</ItemGroup>
</Project> </Project>

View File

@ -8,22 +8,28 @@ using OpenHarbor.CQRS.AspNetCore.Abstractions.Attributes;
namespace OpenHarbor.CQRS.AspNetCore.Mvc; namespace OpenHarbor.CQRS.AspNetCore.Mvc;
public class QueryControllerFeatureProvider(ServiceProvider serviceProvider) public class QueryControllerFeatureProvider : IApplicationFeatureProvider<ControllerFeature>
: IApplicationFeatureProvider<ControllerFeature>
{ {
public void PopulateFeature(IEnumerable<ApplicationPart> parts, ControllerFeature feature) private readonly ServiceProvider _serviceProvider;
public QueryControllerFeatureProvider(ServiceProvider serviceProvider)
{ {
var queryDiscovery = serviceProvider.GetRequiredService<IQueryDiscovery>(); _serviceProvider = serviceProvider;
foreach (var queryMeta in queryDiscovery.GetQueries()) }
public void PopulateFeature(IEnumerable<ApplicationPart> parts, ControllerFeature feature)
{
var queryDiscovery = this._serviceProvider.GetRequiredService<IQueryDiscovery>();
foreach (var f in queryDiscovery.GetQueries())
{ {
var ignoreAttribute = queryMeta.QueryType.GetCustomAttribute<QueryControllerIgnoreAttribute>(); var ignoreAttribute = f.QueryType.GetCustomAttribute<QueryControllerIgnoreAttribute>();
if (ignoreAttribute != null) if (ignoreAttribute != null)
continue; continue;
if (queryMeta.Category != "BasicQuery") if (f.Category != "BasicQuery")
continue; continue;
var controllerType = typeof(QueryController<,>).MakeGenericType(queryMeta.QueryType, queryMeta.QueryResultType); var controllerType = typeof(QueryController<,>).MakeGenericType(f.QueryType, f.QueryResultType);
var controllerTypeInfo = controllerType.GetTypeInfo(); var controllerTypeInfo = controllerType.GetTypeInfo();
feature.Controllers.Add(controllerTypeInfo); feature.Controllers.Add(controllerTypeInfo);
} }

View File

@ -2,28 +2,11 @@
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<IsAotCompatible>false</IsAotCompatible> <PackageIconUrl>https://avatars.githubusercontent.com/u/52874619?v=4</PackageIconUrl>
<Authors>David Lebee, Mathias Beaulieu-Duncan</Authors> <Authors>David Lebee, Mathias Beaulieu-Duncan</Authors>
<Company>Open Harbor</Company> <IsAotCompatible>true</IsAotCompatible>
<PackageIcon>icon.png</PackageIcon>
<PackageReadmeFile>README.md</PackageReadmeFile>
<RepositoryUrl>https://git.openharbor.io/Open-Harbor/dotnet-cqrs</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<DebugType>portable</DebugType>
<DebugSymbols>true</DebugSymbols>
<IncludeSymbols>true</IncludeSymbols>
<IncludeSource>true</IncludeSource>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<None Include="..\icon.png" Pack="true" PackagePath="" CopyToOutputDirectory="Always" />
<None Include="..\README.md" Pack="true" PackagePath="" CopyToOutputDirectory="Always" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" /> <FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup> </ItemGroup>
@ -33,8 +16,4 @@
<ProjectReference Include="..\OpenHarbor.CQRS.AspNetCore.Abstractions\OpenHarbor.CQRS.AspNetCore.Abstractions.csproj" /> <ProjectReference Include="..\OpenHarbor.CQRS.AspNetCore.Abstractions\OpenHarbor.CQRS.AspNetCore.Abstractions.csproj" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="4.12.0" />
</ItemGroup>
</Project> </Project>

View File

@ -1,29 +1,12 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFrameworks>netstandard2.1;net8.0</TargetFrameworks> <TargetFramework>netstandard2.1</TargetFramework>
<IsAotCompatible Condition="$([MSBuild]::IsTargetFrameworkCompatible('$(TargetFramework)', 'net8.0'))">true</IsAotCompatible>
<Nullable>enable</Nullable> <Nullable>enable</Nullable>
<PackageIconUrl>https://avatars.githubusercontent.com/u/52874619?v=4</PackageIconUrl>
<Authors>David Lebee, Mathias Beaulieu-Duncan</Authors>
<LangVersion>default</LangVersion> <LangVersion>default</LangVersion>
<Company>Open Harbor</Company>
<PackageIcon>icon.png</PackageIcon>
<PackageReadmeFile>README.md</PackageReadmeFile>
<RepositoryUrl>https://git.openharbor.io/Open-Harbor/dotnet-cqrs</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<DebugType>portable</DebugType>
<DebugSymbols>true</DebugSymbols>
<IncludeSymbols>true</IncludeSymbols>
<IncludeSource>true</IncludeSource>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<None Include="..\icon.png" Pack="true" PackagePath="" CopyToOutputDirectory="Always" />
<None Include="..\README.md" Pack="true" PackagePath="" CopyToOutputDirectory="Always" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="PoweredSoft.DynamicQuery.Core" Version="3.0.1" /> <PackageReference Include="PoweredSoft.DynamicQuery.Core" Version="3.0.1" />
</ItemGroup> </ItemGroup>

View File

@ -8,7 +8,7 @@ using PoweredSoft.DynamicQuery.Core;
namespace OpenHarbor.CQRS.DynamicQuery.AspNetCore.Mvc; namespace OpenHarbor.CQRS.DynamicQuery.AspNetCore.Mvc;
[ApiController, Route("api/query/[controller]")] [ApiController, Route("api/query/[controller]")]
public class DynamicQueryController<TUnderlyingQuery, TSource, TDestination> : Controller public class DynamicQueryController<TSource, TDestination> : Controller
where TSource : class where TSource : class
where TDestination : class where TDestination : class
{ {
@ -34,7 +34,7 @@ public class DynamicQueryController<TUnderlyingQuery, TSource, TDestination> : C
} }
[ApiController, Route("api/query/[controller]")] [ApiController, Route("api/query/[controller]")]
public class DynamicQueryController<TUnderlyingQuery, TSource, TDestination, TParams> : Controller public class DynamicQueryController<TSource, TDestination, TParams> : Controller
where TSource : class where TSource : class
where TDestination : class where TDestination : class
where TParams : class where TParams : class

View File

@ -1,5 +1,4 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using System.Reflection; using System.Reflection;
using Microsoft.AspNetCore.Mvc.ApplicationParts; using Microsoft.AspNetCore.Mvc.ApplicationParts;
using Microsoft.AspNetCore.Mvc.Controllers; using Microsoft.AspNetCore.Mvc.Controllers;
@ -10,43 +9,18 @@ using OpenHarbor.CQRS.DynamicQuery.Discover;
namespace OpenHarbor.CQRS.DynamicQuery.AspNetCore.Mvc; namespace OpenHarbor.CQRS.DynamicQuery.AspNetCore.Mvc;
public class DynamicQueryControllerFeatureProvider(ServiceProvider serviceProvider) public class DynamicQueryControllerFeatureProvider : IApplicationFeatureProvider<ControllerFeature>
: IApplicationFeatureProvider<ControllerFeature>
{ {
private readonly ServiceProvider _serviceProvider;
/** public DynamicQueryControllerFeatureProvider(ServiceProvider serviceProvider)
* public void PopulateFeature(IEnumerable<ApplicationPart> parts, ControllerFeature feature) {
{ _serviceProvider = serviceProvider;
var queryDiscovery = this.serviceProvider.GetRequiredService<IQueryDiscovery>(); }
foreach (var f in queryDiscovery.GetQueries())
{
var ignoreAttribute = f.QueryType.GetCustomAttribute<QueryControllerIgnoreAttribute>();
if (ignoreAttribute != null)
continue;
if (f.Category != "DynamicQuery")
continue;
if (f is DynamicQueryMeta dynamicQueryMeta)
{
if (dynamicQueryMeta.ParamsType == null)
{
var controllerType = typeof(DynamicQueryController<,,>).MakeGenericType(f.QueryType, dynamicQueryMeta.SourceType, dynamicQueryMeta.DestinationType);
var controllerTypeInfo = controllerType.GetTypeInfo();
feature.Controllers.Add(controllerTypeInfo);
}
else
{
var controllerType = typeof(DynamicQueryController<,,,>).MakeGenericType(f.QueryType, dynamicQueryMeta.SourceType, dynamicQueryMeta.DestinationType, dynamicQueryMeta.ParamsType);
var controllerTypeInfo = controllerType.GetTypeInfo();
feature.Controllers.Add(controllerTypeInfo);
}
}
}
*/
public void PopulateFeature(IEnumerable<ApplicationPart> parts, ControllerFeature feature) public void PopulateFeature(IEnumerable<ApplicationPart> parts, ControllerFeature feature)
{ {
var queryDiscovery = serviceProvider.GetRequiredService<IQueryDiscovery>(); var queryDiscovery = _serviceProvider.GetRequiredService<IQueryDiscovery>();
foreach (var queryMeta in queryDiscovery.GetQueries()) foreach (var queryMeta in queryDiscovery.GetQueries())
{ {
var ignoreAttribute = queryMeta.QueryType.GetCustomAttribute<QueryControllerIgnoreAttribute>(); var ignoreAttribute = queryMeta.QueryType.GetCustomAttribute<QueryControllerIgnoreAttribute>();
@ -58,19 +32,15 @@ public class DynamicQueryControllerFeatureProvider(ServiceProvider serviceProvid
if (queryMeta is DynamicQueryMeta dynamicQueryMeta) if (queryMeta is DynamicQueryMeta dynamicQueryMeta)
{ {
// todo: add better error output for the user
if (dynamicQueryMeta.ParamsType == null) if (dynamicQueryMeta.ParamsType == null)
{ {
// todo: not aot friendly var controllerType = typeof(DynamicQueryController<,>).MakeGenericType(queryMeta.QueryType, dynamicQueryMeta.SourceType, dynamicQueryMeta.DestinationType);
var controllerType = typeof(DynamicQueryController<,,>).MakeGenericType(queryMeta.QueryType, dynamicQueryMeta.SourceType, dynamicQueryMeta.DestinationType);
var controllerTypeInfo = controllerType.GetTypeInfo(); var controllerTypeInfo = controllerType.GetTypeInfo();
feature.Controllers.Add(controllerTypeInfo); feature.Controllers.Add(controllerTypeInfo);
} }
else else
{ {
// todo: not aot friendly var controllerType = typeof(DynamicQueryController<,,>).MakeGenericType(queryMeta.QueryType, dynamicQueryMeta.SourceType, dynamicQueryMeta.DestinationType, dynamicQueryMeta.ParamsType);
var controllerType = typeof(DynamicQueryController<,,,>).MakeGenericType(queryMeta.QueryType, dynamicQueryMeta.SourceType, dynamicQueryMeta.DestinationType, dynamicQueryMeta.ParamsType);
var controllerTypeInfo = controllerType.GetTypeInfo(); var controllerTypeInfo = controllerType.GetTypeInfo();
feature.Controllers.Add(controllerTypeInfo); feature.Controllers.Add(controllerTypeInfo);
} }

View File

@ -1,27 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>net8.0</TargetFramework>
<IsAotCompatible>false</IsAotCompatible> <PackageIconUrl>https://avatars.githubusercontent.com/u/52874619?v=4</PackageIconUrl>
<Company>Open Harbor</Company> <Authors>David Lebee, Mathias Beaulieu-Duncan</Authors>
<PackageIcon>icon.png</PackageIcon> <IsAotCompatible>true</IsAotCompatible>
<PackageReadmeFile>README.md</PackageReadmeFile>
<RepositoryUrl>https://git.openharbor.io/Open-Harbor/dotnet-cqrs</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<DebugType>portable</DebugType>
<DebugSymbols>true</DebugSymbols>
<IncludeSymbols>true</IncludeSymbols>
<IncludeSource>true</IncludeSource>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<None Include="..\icon.png" Pack="true" PackagePath="" CopyToOutputDirectory="Always" />
<None Include="..\README.md" Pack="true" PackagePath="" CopyToOutputDirectory="Always" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<FrameworkReference Include="Microsoft.AspNetCore.App" /> <FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup> </ItemGroup>

View File

@ -1,28 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>netstandard2.1</TargetFramework>
<IsAotCompatible>true</IsAotCompatible> <PackageIconUrl>https://avatars.githubusercontent.com/u/52874619?v=4</PackageIconUrl>
<Authors>David Lebee, Mathias Beaulieu-Duncan</Authors>
<LangVersion>default</LangVersion> <LangVersion>default</LangVersion>
<Company>Open Harbor</Company>
<PackageIcon>icon.png</PackageIcon>
<PackageReadmeFile>README.md</PackageReadmeFile>
<RepositoryUrl>https://git.openharbor.io/Open-Harbor/dotnet-cqrs</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<DebugType>portable</DebugType>
<DebugSymbols>true</DebugSymbols>
<IncludeSymbols>true</IncludeSymbols>
<IncludeSource>true</IncludeSource>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<None Include="..\icon.png" Pack="true" PackagePath="" CopyToOutputDirectory="Always" />
<None Include="..\README.md" Pack="true" PackagePath="" CopyToOutputDirectory="Always" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Pluralize.NET" Version="1.0.2" /> <PackageReference Include="Pluralize.NET" Version="1.0.2" />
<PackageReference Include="PoweredSoft.DynamicQuery" Version="3.0.1" /> <PackageReference Include="PoweredSoft.DynamicQuery" Version="3.0.1" />

View File

@ -1,5 +1,4 @@
using System.Diagnostics.CodeAnalysis; using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.Extensions.DependencyInjection.Extensions;
using OpenHarbor.CQRS.Abstractions; using OpenHarbor.CQRS.Abstractions;
using OpenHarbor.CQRS.Abstractions.Discovery; using OpenHarbor.CQRS.Abstractions.Discovery;
@ -36,7 +35,7 @@ public static class ServiceCollectionExtensions
return services; return services;
} }
public static IServiceCollection AddDynamicQueryWithProvider<TSource, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TQueryableProvider>(this IServiceCollection services, string name = null) public static IServiceCollection AddDynamicQueryWithProvider<TSource, TQueryableProvider>(this IServiceCollection services, string name = null)
where TQueryableProvider : class, IQueryableProvider<TSource> where TQueryableProvider : class, IQueryableProvider<TSource>
where TSource : class where TSource : class
{ {
@ -45,7 +44,7 @@ public static class ServiceCollectionExtensions
return services; return services;
} }
public static IServiceCollection AddDynamicQueryWithParamsAndProvider<TSource, TParams, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TQueryableProvider>(this IServiceCollection services, string name = null) public static IServiceCollection AddDynamicQueryWithParamsAndProvider<TSource, TParams, TQueryableProvider>(this IServiceCollection services, string name = null)
where TQueryableProvider : class, IQueryableProvider<TSource> where TQueryableProvider : class, IQueryableProvider<TSource>
where TParams : class where TParams : class
where TSource : class where TSource : class
@ -85,19 +84,19 @@ public static class ServiceCollectionExtensions
return services; return services;
} }
public static IServiceCollection AddAlterQueryable<TSourceAndDestination, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TService>(this IServiceCollection services) public static IServiceCollection AddAlterQueryable<TSourceAndDestination, TService>(this IServiceCollection services)
where TService : class, IAlterQueryableService<TSourceAndDestination, TSourceAndDestination> where TService : class, IAlterQueryableService<TSourceAndDestination, TSourceAndDestination>
{ {
return services.AddTransient<IAlterQueryableService<TSourceAndDestination, TSourceAndDestination>, TService>(); return services.AddTransient<IAlterQueryableService<TSourceAndDestination, TSourceAndDestination>, TService>();
} }
public static IServiceCollection AddAlterQueryable<TSource, TDestination, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TService>(this IServiceCollection services) public static IServiceCollection AddAlterQueryable<TSource, TDestination, TService>(this IServiceCollection services)
where TService : class, IAlterQueryableService<TSource, TDestination> where TService : class, IAlterQueryableService<TSource, TDestination>
{ {
return services.AddTransient<IAlterQueryableService<TSource, TDestination>, TService>(); return services.AddTransient<IAlterQueryableService<TSource, TDestination>, TService>();
} }
public static IServiceCollection AddAlterQueryableWithParams<TSourceAndTDestination, TParams, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TService> public static IServiceCollection AddAlterQueryableWithParams<TSourceAndTDestination, TParams, TService>
(this IServiceCollection services) (this IServiceCollection services)
where TParams : class where TParams : class
where TService : class, IAlterQueryableService<TSourceAndTDestination, TSourceAndTDestination, TParams> where TService : class, IAlterQueryableService<TSourceAndTDestination, TSourceAndTDestination, TParams>
@ -105,7 +104,7 @@ public static class ServiceCollectionExtensions
return services.AddTransient<IAlterQueryableService< TSourceAndTDestination, TSourceAndTDestination, TParams>, TService>(); return services.AddTransient<IAlterQueryableService< TSourceAndTDestination, TSourceAndTDestination, TParams>, TService>();
} }
public static IServiceCollection AddAlterQueryableWithParams<TSource, TDestination, TParams, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TService> public static IServiceCollection AddAlterQueryableWithParams<TSource, TDestination, TParams, TService>
(this IServiceCollection services) (this IServiceCollection services)
where TParams : class where TParams : class
where TService : class, IAlterQueryableService<TSource, TDestination, TParams> where TService : class, IAlterQueryableService<TSource, TDestination, TParams>
@ -113,7 +112,7 @@ public static class ServiceCollectionExtensions
return services.AddTransient<IAlterQueryableService<TSource, TDestination, TParams>, TService>(); return services.AddTransient<IAlterQueryableService<TSource, TDestination, TParams>, TService>();
} }
public static IServiceCollection AddDynamicQueryInterceptor<TSource, TDestination, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TInterceptor>(this IServiceCollection services) public static IServiceCollection AddDynamicQueryInterceptor<TSource, TDestination, TInterceptor>(this IServiceCollection services)
where TInterceptor : class, IQueryInterceptor where TInterceptor : class, IQueryInterceptor
{ {
services.TryAddTransient<TInterceptor>(); services.TryAddTransient<TInterceptor>();
@ -121,7 +120,7 @@ public static class ServiceCollectionExtensions
new DynamicQueryInterceptorProvider<TSource, TDestination>(typeof(TInterceptor))); new DynamicQueryInterceptorProvider<TSource, TDestination>(typeof(TInterceptor)));
} }
public static IServiceCollection AddDynamicQueryInterceptors<TSource, TDestination, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T1, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T2>(this IServiceCollection services) public static IServiceCollection AddDynamicQueryInterceptors<TSource, TDestination, T1, T2>(this IServiceCollection services)
where T1 : class, IQueryInterceptor where T1 : class, IQueryInterceptor
where T2 : class, IQueryInterceptor where T2 : class, IQueryInterceptor
{ {
@ -131,7 +130,7 @@ public static class ServiceCollectionExtensions
new DynamicQueryInterceptorProvider<TSource, TDestination>(typeof(T1), typeof(T2))); new DynamicQueryInterceptorProvider<TSource, TDestination>(typeof(T1), typeof(T2)));
} }
public static IServiceCollection AddDynamicQueryInterceptors<TSource, TDestination, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T1, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T2, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T3>(this IServiceCollection services) public static IServiceCollection AddDynamicQueryInterceptors<TSource, TDestination, T1, T2, T3>(this IServiceCollection services)
where T1 : class, IQueryInterceptor where T1 : class, IQueryInterceptor
where T2 : class, IQueryInterceptor where T2 : class, IQueryInterceptor
where T3 : class, IQueryInterceptor where T3 : class, IQueryInterceptor
@ -143,7 +142,7 @@ public static class ServiceCollectionExtensions
new DynamicQueryInterceptorProvider<TSource, TDestination>(typeof(T1), typeof(T2), typeof(T3))); new DynamicQueryInterceptorProvider<TSource, TDestination>(typeof(T1), typeof(T2), typeof(T3)));
} }
public static IServiceCollection AddDynamicQueryInterceptors<TSource, TDestination, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T1, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T2, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T3, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T4>(this IServiceCollection services) public static IServiceCollection AddDynamicQueryInterceptors<TSource, TDestination, T1, T2, T3, T4>(this IServiceCollection services)
where T1 : class, IQueryInterceptor where T1 : class, IQueryInterceptor
where T2 : class, IQueryInterceptor where T2 : class, IQueryInterceptor
where T3 : class, IQueryInterceptor where T3 : class, IQueryInterceptor
@ -157,7 +156,7 @@ public static class ServiceCollectionExtensions
new DynamicQueryInterceptorProvider<TSource, TDestination>(typeof(T1), typeof(T2), typeof(T3), typeof(T4))); new DynamicQueryInterceptorProvider<TSource, TDestination>(typeof(T1), typeof(T2), typeof(T3), typeof(T4)));
} }
public static IServiceCollection AddDynamicQueryInterceptors<TSource, TDestination, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T1, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T2, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T3, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T4, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] T5>(this IServiceCollection services) public static IServiceCollection AddDynamicQueryInterceptors<TSource, TDestination, T1, T2, T3, T4, T5>(this IServiceCollection services)
where T1 : class, IQueryInterceptor where T1 : class, IQueryInterceptor
where T2 : class, IQueryInterceptor where T2 : class, IQueryInterceptor
where T3 : class, IQueryInterceptor where T3 : class, IQueryInterceptor

View File

@ -1,28 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>netstandard2.1</TargetFramework>
<IsAotCompatible>true</IsAotCompatible> <PackageIconUrl>https://avatars.githubusercontent.com/u/52874619?v=4</PackageIconUrl>
<Authors>David Lebee, Mathias Beaulieu-Duncan</Authors>
<LangVersion>default</LangVersion> <LangVersion>default</LangVersion>
<Company>Open Harbor</Company>
<PackageIcon>icon.png</PackageIcon>
<PackageReadmeFile>README.md</PackageReadmeFile>
<RepositoryUrl>https://git.openharbor.io/Open-Harbor/dotnet-cqrs</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<DebugType>portable</DebugType>
<DebugSymbols>true</DebugSymbols>
<IncludeSymbols>true</IncludeSymbols>
<IncludeSource>true</IncludeSource>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<None Include="..\icon.png" Pack="true" PackagePath="" CopyToOutputDirectory="Always" />
<None Include="..\README.md" Pack="true" PackagePath="" CopyToOutputDirectory="Always" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="FluentValidation" Version="10.4.0" /> <PackageReference Include="FluentValidation" Version="10.4.0" />
</ItemGroup> </ItemGroup>

View File

@ -1,5 +1,4 @@
using System.Diagnostics.CodeAnalysis; using FluentValidation;
using FluentValidation;
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using OpenHarbor.CQRS.Abstractions; using OpenHarbor.CQRS.Abstractions;
@ -7,14 +6,14 @@ namespace OpenHarbor.CQRS.FluentValidation;
public static class ServiceCollectionExtensions public static class ServiceCollectionExtensions
{ {
private static IServiceCollection AddFluentValidator<T, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TValidator>(this IServiceCollection services) private static IServiceCollection AddFluentValidator<T, TValidator>(this IServiceCollection services)
where TValidator : class, IValidator<T> where TValidator : class, IValidator<T>
{ {
services.AddTransient<IValidator<T>, TValidator>(); services.AddTransient<IValidator<T>, TValidator>();
return services; return services;
} }
public static IServiceCollection AddCommand<TCommand, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TCommandHandler, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TValidator>(this IServiceCollection services) public static IServiceCollection AddCommand<TCommand, TCommandHandler, TValidator>(this IServiceCollection services)
where TCommand : class where TCommand : class
where TCommandHandler : class, ICommandHandler<TCommand> where TCommandHandler : class, ICommandHandler<TCommand>
where TValidator : class, IValidator<TCommand> where TValidator : class, IValidator<TCommand>
@ -23,7 +22,7 @@ public static class ServiceCollectionExtensions
.AddFluentValidator<TCommand, TValidator>(); .AddFluentValidator<TCommand, TValidator>();
} }
public static IServiceCollection AddCommand<TCommand, TCommandResult, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TCommandHandler, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TValidator>(this IServiceCollection services) public static IServiceCollection AddCommand<TCommand, TCommandResult, TCommandHandler, TValidator>(this IServiceCollection services)
where TCommand : class where TCommand : class
where TCommandHandler : class, ICommandHandler<TCommand, TCommandResult> where TCommandHandler : class, ICommandHandler<TCommand, TCommandResult>
where TValidator : class, IValidator<TCommand> where TValidator : class, IValidator<TCommand>
@ -32,14 +31,13 @@ public static class ServiceCollectionExtensions
.AddFluentValidator<TCommand, TValidator>(); .AddFluentValidator<TCommand, TValidator>();
} }
public static IServiceCollection AddQuery<TQuery, TQueryResult, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TQueryHandler, [DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.PublicConstructors)] TValidator>(this IServiceCollection services) public static IServiceCollection AddQuery<TQuery, TQueryResult, TQueryHandler, TValidator>(this IServiceCollection services)
where TQuery : class where TQuery : class
where TQueryHandler : class, IQueryHandler<TQuery, TQueryResult> where TQueryHandler : class, IQueryHandler<TQuery, TQueryResult>
where TValidator : class, IValidator<TQuery> where TValidator : class, IValidator<TQuery>
{ {
services.AddQuery<TQuery, TQueryResult, TQueryHandler>() services.AddQuery<TQuery, TQueryResult, TQueryHandler>()
.AddFluentValidator<TQuery, TValidator>(); .AddFluentValidator<TQuery, TValidator>();
return services; return services;
} }
} }

Binary file not shown.

View File

@ -1,29 +1,11 @@
<Project Sdk="Microsoft.NET.Sdk"> <Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup> <PropertyGroup>
<TargetFramework>net8.0</TargetFramework> <TargetFramework>netstandard2.1</TargetFramework>
<IsAotCompatible>true</IsAotCompatible> <PackageIconUrl>https://avatars.githubusercontent.com/u/52874619?v=4</PackageIconUrl>
<Authors>David Lebee, Mathias Beaulieu-Duncan</Authors> <Authors>David Lebee, Mathias Beaulieu-Duncan</Authors>
<LangVersion>default</LangVersion> <LangVersion>default</LangVersion>
<Company>Open Harbor</Company>
<PackageIcon>icon.png</PackageIcon>
<PackageReadmeFile>README.md</PackageReadmeFile>
<RepositoryUrl>https://git.openharbor.io/Open-Harbor/dotnet-cqrs</RepositoryUrl>
<RepositoryType>git</RepositoryType>
<PublishRepositoryUrl>true</PublishRepositoryUrl>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
<DebugType>portable</DebugType>
<DebugSymbols>true</DebugSymbols>
<IncludeSymbols>true</IncludeSymbols>
<IncludeSource>true</IncludeSource>
<SymbolPackageFormat>snupkg</SymbolPackageFormat>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<None Include="..\icon.png" Pack="true" PackagePath="" CopyToOutputDirectory="Always" />
<None Include="..\README.md" Pack="true" PackagePath="" CopyToOutputDirectory="Always" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\OpenHarbor.CQRS.Abstractions\OpenHarbor.CQRS.Abstractions.csproj" /> <ProjectReference Include="..\OpenHarbor.CQRS.Abstractions\OpenHarbor.CQRS.Abstractions.csproj" />
</ItemGroup> </ItemGroup>

View File

@ -8,21 +8,21 @@ Our implementation of query and command responsibility segregation (CQRS).
> Install nuget package to your awesome project. > Install nuget package to your awesome project.
| Package Name | NuGet | NuGet Install | | Full Version | NuGet | NuGet Install |
|-----------------------------------------| ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |-----------------------------------------------------------------------:| |-----------------------------------------| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |-----------------------------------------------------------------------:|
| OpenHarbor.CQRS | [![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS/) | ```dotnet add package OpenHarbor.CQRS ``` | | OpenHarbor.CQRS | <a href="https://www.nuget.org/packages/OpenHarbor.CQRS/" target="_blank">[![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS/)</a> | ```PM> Install-Package OpenHarbor.CQRS ``` |
| OpenHarbor.CQRS.AspNetCore | [![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.AspNetCore.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.AspNetCore/) | ```dotnet add package OpenHarbor.CQRS.AspNetCore ``` | | OpenHarbor.CQRS.AspNetCore | <a href="https://www.nuget.org/packages/OpenHarbor.CQRS.AspNetCore/" target="_blank">[![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.AspNetCore.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.AspNetCore/)</a> | ```PM> Install-Package OpenHarbor.CQRS.AspNetCore ``` |
| OpenHarbor.CQRS.FluentValidation | [![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.FluentValidation.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.FluentValidation/) | ```dotnet add package OpenHarbor.CQRS.FluentValidation ``` | | OpenHarbor.CQRS.FluentValidation | <a href="https://www.nuget.org/packages/OpenHarbor.CQRS.FluentValidation/" target="_blank">[![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.FluentValidation.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.FluentValidation/)</a> | ```PM> Install-Package OpenHarbor.CQRS.FluentValidation ``` |
| OpenHarbor.CQRS.DynamicQuery | [![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.DynamicQuery.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.DynamicQuery/) | ```dotnet add package OpenHarbor.CQRS.DynamicQuery ``` | | OpenHarbor.CQRS.DynamicQuery | <a href="https://www.nuget.org/packages/OpenHarbor.CQRS.DynamicQuery/" target="_blank">[![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.DynamicQuery.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.DynamicQuery/)</a> | ```PM> Install-Package OpenHarbor.CQRS.DynamicQuery ``` |
| OpenHarbor.CQRS.DynamicQuery.AspNetCore | [![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.DynamicQuery.AspNetCore.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.DynamicQuery.AspNetCore/) | ```dotnet add package OpenHarbor.CQRS.DynamicQuery.AspNetCore ``` | | OpenHarbor.CQRS.DynamicQuery.AspNetCore | <a href="https://www.nuget.org/packages/OpenHarbor.CQRS.DynamicQuery.AspNetCore/" target="_blank">[![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.DynamicQuery.AspNetCore.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.DynamicQuery.AspNetCore/)</a> | ```PM> Install-Package OpenHarbor.CQRS.DynamicQuery.AspNetCore ``` |
> Abstractions Packages. > Abstractions Packages.
| Package Name | NuGet | NuGet Install | | Full Version | NuGet | NuGet Install |
| ---------------------------- |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -----------------------------------------------------: | | ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -----------------------------------------------------: |
| OpenHarbor.CQRS.Abstractions | [![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.Abstractions.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.Abstractions/) | ```dotnet add package OpenHarbor.CQRS.Abstractions ``` | | OpenHarbor.CQRS.Abstractions | <a href="https://www.nuget.org/packages/OpenHarbor.CQRS.Abstractions/" target="_blank">[![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.Abstractions.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.Abstractions/)</a> | ```PM> Install-Package OpenHarbor.CQRS.Abstractions ``` |
| OpenHarbor.CQRS.AspNetCore.Abstractions | [![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.AspNetCore.Abstractions.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.AspNetCore.Abstractions/) | ```dotnet add package OpenHarbor.CQRS.AspNetCore.Abstractions ``` | | OpenHarbor.CQRS.AspNetCore.Abstractions | <a href="https://www.nuget.org/packages/OpenHarbor.CQRS.AspNetCore.Abstractions/" target="_blank">[![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.AspNetCore.Abstractions.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.AspNetCore.Abstractions/)</a> | ```PM> Install-Package OpenHarbor.CQRS.AspNetCore.Abstractions ``` |
| OpenHarbor.CQRS.DynamicQuery.Abstractions | [![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.DynamicQuery.Abstractions.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.DynamicQuery.Abstractions/) | ```dotnet add package OpenHarbor.CQRS.AspNetCore.Abstractions ``` | | OpenHarbor.CQRS.DynamicQuery.Abstractions | <a href="https://www.nuget.org/packages/OpenHarbor.CQRS.DynamicQuery.Abstractions/" target="_blank">[![NuGet](https://img.shields.io/nuget/v/OpenHarbor.CQRS.DynamicQuery.Abstractions.svg?style=flat-square&label=nuget)](https://www.nuget.org/packages/OpenHarbor.CQRS.DynamicQuery.Abstractions/)</a> | ```PM> Install-Package OpenHarbor.CQRS.AspNetCore.Abstractions ``` |
## Sample of startup code for aspnetcore MVC ## Sample of startup code for aspnetcore MVC
@ -30,7 +30,7 @@ Our implementation of query and command responsibility segregation (CQRS).
```csharp ```csharp
public void ConfigureServices(IServiceCollection services) public void ConfigureServices(IServiceCollection services)
{ {
// make sure to add your queries and commands before configuring MvCBuilder with .AddOpenHarborCommands and .AddOpenHarborQueries // make sure to add your queries and commands before the .AddPoweredSoftQueries and .AddPoweredSoftCommands
AddQueries(services); AddQueries(services);
AddCommands(services); AddCommands(services);
@ -63,12 +63,11 @@ private void AddQueries(IServiceCollection services)
services.AddQuery<PersonQuery, IQueryable<Person>, PersonQueryHandler>(); services.AddQuery<PersonQuery, IQueryable<Person>, PersonQueryHandler>();
} }
``` ```
# Fluent Validation # Fluent Validation
We use fluent validation in all of our projects, but we don't want it to be enforced. We use fluent validation in all of our projects, but we don't want it to be enforced.
If you install ```OpenHarbor.CQRS.FluentValidation``` you can use this way of registrating your commands. If you install. ```PoweredSoft.CQRS.FluentValidation``` you can use this way of registrating your commands.
```csharp ```csharp
public void ConfigureServices(IServiceCollection services) public void ConfigureServices(IServiceCollection services)
@ -80,19 +79,7 @@ public void ConfigureServices(IServiceCollection services)
public void ConfigureServices(IServiceCollection services) public void ConfigureServices(IServiceCollection services)
{ {
// with OpenHarbor.CQRS.FluentValidation package. // with PoweredSoft.CQRS.FluentValidation package.
services.AddCommand<EchoCommand, string, EchoCommandHandler, EchoCommandValidator>(); services.AddCommandWithValidator<EchoCommand, string, EchoCommandHandler, EchoCommandValidator>();
} }
``` ```
# 2024 Roadmap
| Task | Description | Status |
|----------------------------------------------------------------------------------|------------------------------------------------------------------------------------------------------|--------|
| Support .NET 8 | Ensure compatibility with .NET 8. | ✅ |
| Create a new demo project as an example | Develop a new demo project to serve as an example for users. | ⬜️ |
| New Independent Module for MVC | Develop a standalone module, independent of MVC, to enhance framework flexibility. | ⬜️ |
| Implement .NET Native Compilation (AOT) | Enable Ahead-of-Time (AOT) compilation support for .NET 8. | ⬜️ |
| Update FluentValidation | Upgrade FluentValidation to the latest version, addressing potential breaking changes. | ⬜️ |
| Create a website for the Framework | Develop a website to host comprehensive documentation for the framework. | ⬜️ |
| Re-add support for GraphQL | Re-integrate support for GraphQL, exploring lightweight solutions. | ⬜️ |

BIN
icon.png

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB