Search Results for

    Show / Hide Table of Contents

    What's new in Intent Architect (November 2024)

    Welcome to the November 2024 edition of highlights of What's New in Intent Architect.

    • Highlights
      • Hangfire Scheduler - Model scheduled jobs in the Services Designer, and have them realized using Hangfire.
      • FastEndpoints an alternative to ASP.NET Core Controllers - FastEndpoints is a developer friendly alternative to Minimal APIs & MVC.
      • Google Cloud Storage Module - New support for Google Cloud Storage integration in .NET applications.
      • Specify custom implicit usings - Specify custom implicit usings from inside the Visual Studio designer.
      • Generate a .gitignore file - Automatically generate a .NET .gitignore file for your application.
      • Command field default values - Default values configured on CQRS Command fields are now used in the Command's constructor.
      • Specify default values for associations - Specify default values for properties generated for associations.
      • Primitive collection modeling - Attributes modeled as primitive collections now persisted using Entity Framework.

    Update details

    Hangfire Scheduler Module

    This module allows you to model scheduled jobs in the Services Designer. These scheduled job are then realized using the Hangfire.

    Modeled scheduled jobs

    See the module documentation for more details.

    Available from:

    • Intent.Hangfire 1.0.0-beta.3

    FastEndpoints an alternative to ASP.NET Core Controllers

    FastEndpoints is a developer friendly alternative to Minimal APIs & MVC. Its performance is on par with Minimal APIs. Use Intent Architect to perform a drop-in replacement of ASP.NET Controllers by uninstalling the following modules before installing FastEndpoints.

    Uninstall the following:

    • Intent.AspNetCore.Versioning (if present)
    • Intent.AspNetCore.Controllers.Dispatch.MediatR (if present)
    • Intent.AspNetCore.Controllers.Dispatch.ServiceContract (if present)
    • Intent.AspNetCore.Controllers

    Instead of the Controllers folder you will see a FastEndpoints folder in your API project. Instead of a Controller class filled with Action methods, and instead of having a file containing many Minimal API routes, you have a class per endpoint.

    FastEndpoints Folder

    An example of a FastEndpoint class:

    public class CreateClientCommandEndpoint : Endpoint<CreateClientCommand, JsonResponse<Guid>>
    {
        private readonly ISender _mediator;
    
        public CreateClientCommandEndpoint(ISender mediator)
        {
            _mediator = mediator ?? throw new ArgumentNullException(nameof(mediator));
        }
    
        public override void Configure()
        {
            Post("api/clients");
            Description(b =>
            {
                b.WithTags("Clients");
                b.Accepts<CreateClientCommand>(MediaTypeNames.Application.Json);
                b.Produces<JsonResponse<Guid>>(StatusCodes.Status201Created, contentType: MediaTypeNames.Application.Json);
                b.ProducesProblemDetails();
                b.ProducesProblemDetails(StatusCodes.Status500InternalServerError);
            });
            AllowAnonymous();
            Options(x => x.WithVersionSet(">>Api Version<<").MapToApiVersion(new ApiVersion(1.0)));
        }
    
        public override async Task HandleAsync(CreateClientCommand req, CancellationToken ct)
        {
            var result = default(Guid);
            result = await _mediator.Send(req, ct);
            await SendCreatedAtAsync<GetClientByIdQueryEndpoint>(new { id = result }, new JsonResponse<Guid>(result), cancellation: ct);
        }
    }
    

    This will respect your selected dispatch pattern whether it is CQRS with MediatR or the Traditional Services dispatch pattern.

    Read more about FastEndpoints here.

    Note

    FastEndpoints itself may not support every capability like ASP.NET Core Controllers does and similarly the Module for Intent Architect is in beta so it may not be on par. If you find that it is missing a capability you're looking for, please reach out to us on github and log a feature request.

    Available from:

    • Intent.FastEndpoints 1.0.0-beta.8

    Google Cloud Storage Module

    The Google Cloud Storage module for .NET provides an easier-to-use API via the ICloudStorage interface. This release simplifies interactions such as uploading, downloading, listing, and deleting objects with Google Cloud Storage, enabling developers to focus more on business logic and less on backend infrastructure.

    For more details, refer to the module documentation.

    Available from:

    • Intent.Google.CloudStorage 1.0.0-beta.1

    Specify custom implicit (global) usings for projects

    You can now generate custom implicit using directives inside the Visual Studio designer:

    Custom implicit using

    Which will cause <Using Include="..." /> elements to be generated in the .csproj:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <TargetFramework>net8.0</TargetFramework>
        <GenerateDocumentationFile>true</GenerateDocumentationFile>
        <NoWarn>$(NoWarn);1591</NoWarn>
        <Nullable>enable</Nullable>
      </PropertyGroup>
    
      <ItemGroup>
        <Using Include="Shouldly" />
      </ItemGroup>
    
    </Project>
    

    Available from:

    • Intent.VisualStudio.Projects 3.8.1

    .gitignore file generation

    You can now specify the inclusion of a .NET .gitignore file as part of your application.

    .gitignore setting

    Available from:

    • Intent.VisualStudio.Projects 3.8.2

    Command field default values

    When a default values is set on a Command field in the Services Designer:

    command field default value

    The value will now pull through and be used on the Command constructor:

    command constructor

    Available from:

    • Intent.Application.MediatR 4.2.9
    • Intent.Modelers.Services.CQRS 5.0.1

    Specify default values for associations

    You can now specify default values for associations, for example:

    Association values

    Which will cause the following to be generated for the Lines property:

    public class Invoice
    {
        public Guid Id { get; set; }
    
        public string Number { get; set; }
    
        public DateTime Date { get; set; }
    
        public virtual ICollection<Line> Lines { get; set; } = new();
    }
    

    Available from:

    • Intent.Modelers.Domain 3.11.0

    Primitive collection modeling

    Primitive data types (examples include string, int, bool etc) can now be modelled as collections in the Domain Designer and will leverage Entity Framework's Primitive collection properties functionality to persist the data as a JSON column in the database.

    Primitive Collection

    For additional details, see the Intent Architect Entity Framework Module documentation

    • Edit this page
    ☀
    ☾
    In this article
    Back to top Copyright © 2017-, Intent Software Pte Ltd.