Wally.CleanArchitecture.Template 0.1.1391

There is a newer version of this package available.
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

  1. Add AggregateRoot Shadow Properties or AuditableEntity abstract class for selected AggregateRoot and Entity:
public DateTime Created { get; set; }

public string? CreatedBy { get; set; }

public DateTime? LastModified { get; set; }

public string? LastModifiedBy { get; set; }
  1. ValueObject abstract base:

MSDN

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
}
  1. Create DependencyInjection class in Infrastructure

GitHub

  1. Use Aspect Oriented Programming

YouTube

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

website

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

WebSite

  • 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