Wally.CleanArchitecture.Template
0.1.1391
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.1391
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.3187 | 12 | 6/28/2025 |
1.3.3181 | 242 | 6/13/2025 |
1.3.3174 | 145 | 6/4/2025 |
1.3.3172 | 133 | 6/4/2025 |
1.3.3159 | 128 | 4/12/2025 |
1.3.3146 | 287 | 3/23/2025 |
1.3.3087 | 151 | 2/2/2025 |
1.3.3083 | 131 | 1/30/2025 |
1.3.3074 | 128 | 1/25/2025 |
1.3.3064 | 106 | 1/24/2025 |
1.3.3047 | 130 | 1/17/2025 |
1.3.3022 | 114 | 1/11/2025 |
1.3.2945 | 162 | 12/13/2024 |
1.3.2943 | 130 | 12/12/2024 |
1.3.2901 | 134 | 11/28/2024 |
1.3.2900 | 129 | 11/25/2024 |
1.3.2894 | 140 | 11/23/2024 |
1.3.2884 | 140 | 11/17/2024 |
1.3.2872 | 147 | 11/16/2024 |
1.3.2866 | 136 | 11/9/2024 |
1.3.2865 | 134 | 11/9/2024 |
1.3.2862 | 125 | 11/8/2024 |
1.3.2860 | 129 | 11/7/2024 |
1.3.2829 | 140 | 10/24/2024 |
1.3.2783 | 130 | 10/23/2024 |
1.3.2746 | 152 | 10/18/2024 |
1.3.2735 | 132 | 10/18/2024 |
1.3.2721 | 143 | 10/18/2024 |
1.3.2720 | 115 | 10/17/2024 |
1.3.2710 | 145 | 10/10/2024 |
1.3.2704 | 124 | 10/9/2024 |
1.3.2680 | 128 | 10/2/2024 |
1.3.2674 | 144 | 9/25/2024 |
1.3.2665 | 137 | 9/13/2024 |
1.3.2654 | 141 | 8/26/2024 |
1.3.2652 | 144 | 8/5/2024 |
1.3.2650 | 118 | 7/30/2024 |
1.3.2638 | 157 | 7/11/2024 |
1.3.2634 | 167 | 7/10/2024 |
1.3.2621 | 169 | 7/6/2024 |
1.3.2615 | 166 | 6/27/2024 |
1.3.2584 | 271 | 5/26/2024 |
1.3.2579 | 181 | 5/25/2024 |
1.3.2575 | 140 | 5/25/2024 |
1.3.2571 | 141 | 5/25/2024 |
1.3.2570 | 180 | 5/24/2024 |
1.3.2563 | 172 | 5/23/2024 |
1.3.2562 | 125 | 5/23/2024 |
1.3.2560 | 153 | 5/22/2024 |
1.3.2557 | 172 | 5/21/2024 |
1.3.2554 | 136 | 5/21/2024 |
1.3.2551 | 167 | 5/20/2024 |
1.3.2547 | 199 | 5/17/2024 |
1.3.2537 | 138 | 5/16/2024 |
1.3.2536 | 124 | 5/16/2024 |
1.3.2535 | 286 | 5/9/2024 |
1.3.2527 | 140 | 4/26/2024 |
1.3.2510 | 146 | 4/24/2024 |
1.3.2490 | 194 | 4/13/2024 |
1.3.2473 | 195 | 4/8/2024 |
1.3.2471 | 200 | 4/8/2024 |
1.3.2431 | 210 | 4/4/2024 |
1.3.2404 | 357 | 3/22/2024 |
1.3.2401 | 205 | 3/21/2024 |
1.3.2366 | 1,074 | 2/21/2024 |
1.3.2365 | 416 | 2/21/2024 |
1.3.2347 | 745 | 2/9/2024 |
1.3.2248 | 2,273 | 12/6/2023 |
1.3.2243 | 587 | 12/5/2023 |
1.3.2227 | 967 | 11/26/2023 |
1.3.2222 | 705 | 11/26/2023 |
1.3.2212 | 843 | 11/18/2023 |
1.3.2209 | 556 | 11/17/2023 |
1.3.2172 | 1,122 | 11/1/2023 |
1.3.2166 | 796 | 10/30/2023 |
1.3.2163 | 745 | 10/29/2023 |
1.3.2149 | 1,015 | 10/18/2023 |
1.3.2137 | 1,166 | 10/3/2023 |
1.3.2108 | 798 | 9/25/2023 |
1.3.2093 | 816 | 9/17/2023 |
1.3.2086 | 853 | 8/27/2023 |
1.3.2085 | 922 | 8/27/2023 |
1.3.2042 | 1,016 | 6/23/2023 |
1.3.2023 | 906 | 6/15/2023 |
1.3.1982 | 984 | 5/28/2023 |
1.3.1974 | 839 | 5/26/2023 |
1.3.1954 | 863 | 5/20/2023 |
1.3.1948 | 895 | 5/18/2023 |
1.3.1947 | 746 | 5/18/2023 |
1.3.1941 | 928 | 5/17/2023 |
1.3.1933 | 986 | 5/15/2023 |
1.3.1913 | 898 | 5/12/2023 |
1.3.1912 | 1,021 | 5/12/2023 |
1.3.1861 | 1,180 | 3/24/2023 |
1.3.1860 | 1,045 | 3/24/2023 |
1.3.1850 | 922 | 3/18/2023 |
1.3.1847 | 1,056 | 3/15/2023 |
1.3.1846 | 980 | 3/14/2023 |
1.3.1844 | 1,056 | 3/14/2023 |
1.3.1835 | 860 | 3/9/2023 |
1.3.1834 | 888 | 3/9/2023 |
1.3.1832 | 840 | 3/9/2023 |
1.3.1829 | 929 | 3/9/2023 |
1.3.1817 | 1,006 | 3/3/2023 |
1.2.1814 | 1,273 | 2/27/2023 |
1.2.1811 | 1,130 | 2/20/2023 |
1.2.1767 | 1,202 | 1/18/2023 |
1.2.1760 | 1,227 | 1/14/2023 |
1.2.1743 | 1,305 | 12/25/2022 |
1.2.1701 | 1,285 | 11/23/2022 |
1.2.1690 | 1,286 | 11/14/2022 |
1.2.1689 | 1,295 | 11/14/2022 |
1.2.1687 | 1,281 | 11/14/2022 |
1.2.1685 | 1,256 | 11/11/2022 |
1.2.8 | 1,271 | 11/1/2022 |
1.2.7 | 1,083 | 11/1/2022 |
1.2.6 | 1,315 | 11/1/2022 |
1.2.5 | 1,421 | 10/4/2022 |
1.2.4 | 1,411 | 9/9/2022 |
1.2.3 | 1,503 | 6/9/2022 |
1.2.2 | 1,323 | 6/9/2022 |
1.2.1 | 1,328 | 4/17/2022 |
1.2.0 | 1,497 | 4/17/2022 |
1.1.1553 | 1,439 | 6/10/2022 |
1.1.1516 | 1,292 | 4/17/2022 |
1.1.1515 | 1,501 | 4/17/2022 |
1.1.0 | 1,578 | 3/22/2022 |
0.1.1514 | 1,432 | 4/17/2022 |
0.1.1513 | 1,398 | 4/16/2022 |
0.1.1512 | 1,419 | 4/16/2022 |
0.1.1509 | 1,536 | 4/16/2022 |
0.1.1487 | 1,452 | 3/29/2022 |
0.1.1471 | 1,451 | 3/20/2022 |
0.1.1470 | 1,596 | 3/20/2022 |
0.1.1463 | 1,508 | 3/20/2022 |
0.1.1461 | 1,431 | 3/19/2022 |
0.1.1454 | 1,550 | 3/19/2022 |
0.1.1452 | 1,569 | 3/19/2022 |
0.1.1437 | 1,443 | 3/13/2022 |
0.1.1433 | 1,645 | 2/15/2022 |
0.1.1426 | 1,706 | 2/10/2022 |
0.1.1422 | 1,621 | 2/10/2022 |
0.1.1398 | 1,552 | 1/22/2022 |
0.1.1393 | 1,394 | 1/16/2022 |
0.1.1391 | 1,604 | 1/16/2022 |
0.1.1388 | 1,672 | 1/16/2022 |