Wally.CleanArchitecture.Template
0.1.1393
There is a newer version of this package available.
See the version list below for details.
See the version list below for details.
dotnet new install Wally.CleanArchitecture.Template::0.1.1393
This package contains a .NET Template Package you can call from the shell/command line.
Wally.CleanArchitecture
[[TOC]]
ToDo
- Add
AggregateRoot
Shadow Properties
orAuditableEntity
abstract class for selectedAggregateRoot
andEntity
:
public DateTime Created { get; set; }
public string? CreatedBy { get; set; }
public DateTime? LastModified { get; set; }
public string? LastModifiedBy { get; set; }
ValueObject
abstract base:
public abstract class ValueObject
{
protected static bool EqualOperator(ValueObject left, ValueObject right)
{
if (ReferenceEquals(left, null) ^ ReferenceEquals(right, null))
{
return false;
}
return ReferenceEquals(left, null) || left.Equals(right);
}
protected static bool NotEqualOperator(ValueObject left, ValueObject right)
{
return !(EqualOperator(left, right));
}
protected abstract IEnumerable<object> GetEqualityComponents();
public override bool Equals(object obj)
{
if (obj == null || obj.GetType() != GetType())
{
return false;
}
var other = (ValueObject)obj;
return this.GetEqualityComponents().SequenceEqual(other.GetEqualityComponents());
}
public override int GetHashCode()
{
return GetEqualityComponents()
.Select(x => x != null ? x.GetHashCode() : 0)
.Aggregate((x, y) => x ^ y);
}
// Other utility methods
}
- Create
DependencyInjection
class inInfrastructure
- Use Aspect Oriented Programming
Components
Swagger
UI: https://localhost:7197/swagger/index.html
Serilog
serilog.json
{
"Serilog": {
"Using": [
"Serilog.Sinks.Console",
"Serilog.Sinks.ApplicationInsights"
],
"MinimumLevel": {
"Default": "Debug",
"Override": {
"Microsoft": "Information"
}
},
"WriteTo": [
{
"Name": "Debug"
},
{
"Name": "Console",
"Args": {
"theme": "Serilog.Sinks.SystemConsole.Themes.AnsiConsoleTheme::Code, Serilog.Sinks.Console",
"outputTemplate": "[{Timestamp:HH:mm:ss} {Level}] {SourceContext}{NewLine}{Message:lj}{NewLine}{Properties:j}{NewLine}{Exception}{NewLine}"
}
},
{
"Name": "ApplicationInsights",
"Args": {
"instrumentationKey": "---",
"restrictedToMinimumLevel": "Information",
"telemetryConverter": "Serilog.Sinks.ApplicationInsights.Sinks.ApplicationInsights.TelemetryConverters.TraceTelemetryConverter, Serilog.Sinks.ApplicationInsights"
}
},
{
"Name": "MSSqlServer",
"Args": {
"connectionString": "---",
"tableName": "Log",
"columnOptionsSection": {
"addStandardColumns": [ "LogEvent" ],
"removeStandardColumns": [ "Properties" ]
}
}
}
],
"Enrich": [
"FromLogContext",
"WithMachineName",
"WithThreadId"
],
"Properties": {
"Application": "Wally.CleanArchitecture"
}
}
}
Health Checks
AppVer: https://localhost:7197 Health: https://localhost:7197/healthchecks
UI: https://localhost:7197/healthchecks-ui UI cfg: https://localhost:7197/healthchecks-api/ui-settings
API: https://localhost:7197/healthchecks-api
Webhooks: https://localhost:7197/healthchecks-webhooks
appsettings.json
...
"HealthChecks-UI": {
"DisableMigrations": true,
"HealthChecks": [
{
"Name": "Poll Manager",
"Uri": "/healthChecks"
}
],
"Webhooks": [
{
"Name": "",
"Uri": "",
"Payload": "",
"RestoredPayload": ""
}
],
"EvaluationTimeOnSeconds": 10,
"MinimumSecondsBetweenFailureNotifications": 60,
"MaximumExecutionHistoriesPerEndpoint": 15,
"HealthCheckDatabaseConnectionString": "Data Source=healthChecks"
}
...
Known Issues:
Mapster
Known Issuees:
System.MissingMethodException: Constructor on type 'Mapster.EFCore.MapsterAsyncEnumerable`1[[Wally.CleanArchitecture.Contracts.Responses.Users.GetUserResponse, Wally.CleanArchitecture.Contracts, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' not found.
at System.RuntimeType.CreateInstanceImpl(BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture)
at System.Activator.CreateInstance(Type type, BindingFlags bindingAttr, Binder binder, Object[] args, CultureInfo culture, Object[] activationAttributes)
at System.Activator.CreateInstance(Type type, Object[] args)
at Mapster.EFCore.MapsterQueryableProvider.ExecuteAsync[TResult](Expression expression, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync[TSource,TResult](MethodInfo operatorMethodInfo, IQueryable`1 source, Expression expression, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.ExecuteAsync[TSource,TResult](MethodInfo operatorMethodInfo, IQueryable`1 source, CancellationToken cancellationToken)
at Microsoft.EntityFrameworkCore.EntityFrameworkQueryableExtensions.SingleAsync[TSource](IQueryable`1 source, CancellationToken cancellationToken)
at Wally.CleanArchitecture.Persistence.Repository`1.GetAsync[TResult](Guid id, CancellationToken cancellationToken) in C:\repo\wally\wally.CleanArchitecture\src\Wally.CleanArchitecture.Persistence\Repository.cs:line 0
at Wally.CleanArchitecture.Application.Users.Queries.GetUserQueryHandler.HandleAsync(GetUserQuery query, CancellationToken cancellationToken) in C:\repo\wally\wally.CleanArchitecture\src\Wally.CleanArchitecture.Application\Users\Queries\GetUserQueryHandler.cs:line 19
at Wally.CleanArchitecture.Application.Abstractions.QueryHandler`2.Handle(TQuery query, CancellationToken cancellationToken) in C:\repo\wally\wally.CleanArchitecture\src\Wally.CleanArchitecture.Application\Abstractions\QueryHandler.cs:line 16
at MediatR.Internal.RequestHandlerWrapperImpl`2.<>c__DisplayClass1_0.<Handle>g__Handler|0()
at MediatR.Pipeline.RequestExceptionProcessorBehavior`2.Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate`1 next)
AutoMapper
-
net6.0
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.3.3083 | 0 | 1/30/2025 |
1.3.3074 | 73 | 1/25/2025 |
1.3.3064 | 40 | 1/24/2025 |
1.3.3047 | 83 | 1/17/2025 |
1.3.3022 | 70 | 1/11/2025 |
1.3.2945 | 127 | 12/13/2024 |
1.3.2943 | 102 | 12/12/2024 |
1.3.2901 | 107 | 11/28/2024 |
1.3.2900 | 100 | 11/25/2024 |
1.3.2894 | 113 | 11/23/2024 |
1.3.2884 | 110 | 11/17/2024 |
1.3.2872 | 116 | 11/16/2024 |
1.3.2866 | 107 | 11/9/2024 |
1.3.2865 | 107 | 11/9/2024 |
1.3.2862 | 100 | 11/8/2024 |
1.3.2860 | 104 | 11/7/2024 |
1.3.2829 | 112 | 10/24/2024 |
1.3.2783 | 104 | 10/23/2024 |
1.3.2746 | 130 | 10/18/2024 |
1.3.2735 | 110 | 10/18/2024 |
1.3.2721 | 117 | 10/18/2024 |
1.3.2720 | 94 | 10/17/2024 |
1.3.2710 | 116 | 10/10/2024 |
1.3.2704 | 101 | 10/9/2024 |
1.3.2680 | 100 | 10/2/2024 |
1.3.2674 | 115 | 9/25/2024 |
1.3.2665 | 115 | 9/13/2024 |
1.3.2654 | 116 | 8/26/2024 |
1.3.2652 | 120 | 8/5/2024 |
1.3.2650 | 90 | 7/30/2024 |
1.3.2638 | 138 | 7/11/2024 |
1.3.2634 | 109 | 7/10/2024 |
1.3.2621 | 144 | 7/6/2024 |
1.3.2615 | 140 | 6/27/2024 |
1.3.2584 | 247 | 5/26/2024 |
1.3.2579 | 151 | 5/25/2024 |
1.3.2575 | 117 | 5/25/2024 |
1.3.2571 | 118 | 5/25/2024 |
1.3.2570 | 151 | 5/24/2024 |
1.3.2563 | 150 | 5/23/2024 |
1.3.2562 | 104 | 5/23/2024 |
1.3.2560 | 129 | 5/22/2024 |
1.3.2557 | 141 | 5/21/2024 |
1.3.2554 | 110 | 5/21/2024 |
1.3.2551 | 141 | 5/20/2024 |
1.3.2547 | 178 | 5/17/2024 |
1.3.2537 | 117 | 5/16/2024 |
1.3.2536 | 103 | 5/16/2024 |
1.3.2535 | 263 | 5/9/2024 |
1.3.2527 | 114 | 4/26/2024 |
1.3.2510 | 122 | 4/24/2024 |
1.3.2490 | 172 | 4/13/2024 |
1.3.2473 | 168 | 4/8/2024 |
1.3.2471 | 176 | 4/8/2024 |
1.3.2431 | 187 | 4/4/2024 |
1.3.2404 | 332 | 3/22/2024 |
1.3.2401 | 184 | 3/21/2024 |
1.3.2366 | 1,049 | 2/21/2024 |
1.3.2365 | 389 | 2/21/2024 |
1.3.2347 | 714 | 2/9/2024 |
1.3.2248 | 2,261 | 12/6/2023 |
1.3.2243 | 574 | 12/5/2023 |
1.3.2227 | 954 | 11/26/2023 |
1.3.2222 | 694 | 11/26/2023 |
1.3.2212 | 830 | 11/18/2023 |
1.3.2209 | 546 | 11/17/2023 |
1.3.2172 | 1,110 | 11/1/2023 |
1.3.2166 | 776 | 10/30/2023 |
1.3.2163 | 736 | 10/29/2023 |
1.3.2149 | 1,001 | 10/18/2023 |
1.3.2137 | 1,153 | 10/3/2023 |
1.3.2108 | 774 | 9/25/2023 |
1.3.2093 | 804 | 9/17/2023 |
1.3.2086 | 834 | 8/27/2023 |
1.3.2085 | 904 | 8/27/2023 |
1.3.2042 | 995 | 6/23/2023 |
1.3.2023 | 880 | 6/15/2023 |
1.3.1982 | 959 | 5/28/2023 |
1.3.1974 | 814 | 5/26/2023 |
1.3.1954 | 838 | 5/20/2023 |
1.3.1948 | 868 | 5/18/2023 |
1.3.1947 | 716 | 5/18/2023 |
1.3.1941 | 903 | 5/17/2023 |
1.3.1933 | 959 | 5/15/2023 |
1.3.1913 | 873 | 5/12/2023 |
1.3.1912 | 994 | 5/12/2023 |
1.3.1861 | 1,145 | 3/24/2023 |
1.3.1860 | 1,019 | 3/24/2023 |
1.3.1850 | 897 | 3/18/2023 |
1.3.1847 | 1,021 | 3/15/2023 |
1.3.1846 | 951 | 3/14/2023 |
1.3.1844 | 1,028 | 3/14/2023 |
1.3.1835 | 825 | 3/9/2023 |
1.3.1834 | 862 | 3/9/2023 |
1.3.1832 | 814 | 3/9/2023 |
1.3.1829 | 899 | 3/9/2023 |
1.3.1817 | 976 | 3/3/2023 |
1.2.1814 | 1,251 | 2/27/2023 |
1.2.1811 | 1,095 | 2/20/2023 |
1.2.1767 | 1,173 | 1/18/2023 |
1.2.1760 | 1,199 | 1/14/2023 |
1.2.1743 | 1,258 | 12/25/2022 |
1.2.1701 | 1,256 | 11/23/2022 |
1.2.1690 | 1,254 | 11/14/2022 |
1.2.1689 | 1,262 | 11/14/2022 |
1.2.1687 | 1,252 | 11/14/2022 |
1.2.1685 | 1,229 | 11/11/2022 |
1.2.8 | 1,242 | 11/1/2022 |
1.2.7 | 1,053 | 11/1/2022 |
1.2.6 | 1,280 | 11/1/2022 |
1.2.5 | 1,392 | 10/4/2022 |
1.2.4 | 1,379 | 9/9/2022 |
1.2.3 | 1,465 | 6/9/2022 |
1.2.2 | 1,271 | 6/9/2022 |
1.2.1 | 1,269 | 4/17/2022 |
1.2.0 | 1,457 | 4/17/2022 |
1.1.1553 | 1,401 | 6/10/2022 |
1.1.1516 | 1,254 | 4/17/2022 |
1.1.1515 | 1,461 | 4/17/2022 |
1.1.0 | 1,530 | 3/22/2022 |
0.1.1514 | 1,385 | 4/17/2022 |
0.1.1513 | 1,360 | 4/16/2022 |
0.1.1512 | 1,378 | 4/16/2022 |
0.1.1509 | 1,493 | 4/16/2022 |
0.1.1487 | 1,407 | 3/29/2022 |
0.1.1471 | 1,403 | 3/20/2022 |
0.1.1470 | 1,544 | 3/20/2022 |
0.1.1463 | 1,456 | 3/20/2022 |
0.1.1461 | 1,387 | 3/19/2022 |
0.1.1454 | 1,505 | 3/19/2022 |
0.1.1452 | 1,527 | 3/19/2022 |
0.1.1437 | 1,397 | 3/13/2022 |
0.1.1433 | 1,594 | 2/15/2022 |
0.1.1426 | 1,663 | 2/10/2022 |
0.1.1422 | 1,579 | 2/10/2022 |
0.1.1398 | 1,506 | 1/22/2022 |
0.1.1393 | 1,348 | 1/16/2022 |
0.1.1391 | 1,550 | 1/16/2022 |
0.1.1388 | 1,628 | 1/16/2022 |