MercatorPelican laat toe om een onbeperkt aantal ToolKits op maat in te richten. Deze ToolKits steunen op het programmeerconcept Blazor Hybride .NET 10. Om een nieuwe ToolKit te creëren, kan men een voorbeeld downloaden uit deze rubriek. Het is ook mogelijk om te starten vanaf een nieuw project van het type "klassenbibliotheek" (class library) in Visual Studio.
Het voorbeeld wordt hier gegeven voor een multiplatformproject. In een ToolKit moet men slechts twee omgevingen onderscheiden:
- WinForm: voor Windows
- Core Only: die gebruikt wordt voor Android, iOS, web IIS en web Linux
Het is aanbevolen om het project te vereenvoudigen als men van bij het begin weet dat een platform nooit gebruikt zal worden.
Hier is de standaardcode van een csproj-bestand voor een ToolKit-project:
<Project Sdk="Microsoft.NET.Sdk.Razor">
<PropertyGroup>
<Configurations>DebugCoreOnly;DebugWinforms;ReleaseCoreOnly;ReleaseWinforms</Configurations>
<ImplicitUsings>enable</ImplicitUsings>
<FileVersion>1.0.0.100</FileVersion>
<Version>1.0.0.0</Version>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='DebugCoreOnly' Or '$(Configuration)'=='ReleaseCoreOnly'">
<TargetFramework>net10.0</TargetFramework>
<UseMaui>false</UseMaui>
<UseWindowsForms>false</UseWindowsForms>
<EnableDefaultCssItems>false</EnableDefaultCssItems>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='DebugWinforms' Or '$(Configuration)'=='ReleaseWinforms'">
<TargetFramework>net10.0-windows</TargetFramework>
<UseWindowsForms>true</UseWindowsForms>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='DebugCoreOnly'">
<DefineConstants>TRACE;DEBUG;COREONLY</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='ReleaseCoreOnly'">
<DefineConstants>TRACE;COREONLY</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='DebugWinforms'">
<DefineConstants>TRACE;DEBUG;WINFORMS</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)'=='ReleaseWinforms'">
<DefineConstants>TRACE;WINFORMS</DefineConstants>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Newtonsoft.Json" Version="$(NewtonsoftJsonVersion)" />
<PackageReference Include="Microsoft.Data.SqlClient" Version="$(MicrosoftDataSqlClientVersion)" />
</ItemGroup>
<PropertyGroup>
<SatelliteResourceLanguages>en;fr;nl;de</SatelliteResourceLanguages>
</PropertyGroup>
<ItemGroup Condition="'$(Configuration)'=='DebugCoreOnly' Or '$(Configuration)'=='ReleaseCoreOnly'">
<Reference Include="MercatorTunnel">
<HintPath>…\fw100CoreOnly\MercatorTunnel.dll</HintPath>
</Reference>
<Reference Include="MercatorUi">
<HintPath>…\fw100CoreOnly\MercatorUi.dll</HintPath>
</Reference>
<Reference Include="MercatorBlazorComponents">
<HintPath>…\fw100CoreOnly\MercatorBlazorComponents.dll</HintPath>
</Reference>
<Reference Include="MercatorPelican">
<HintPath>…\fw100CoreOnly\MercatorPelican.dll</HintPath>
</Reference>
<FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>
<ItemGroup Condition="'$(Configuration)'=='DebugWinforms' Or '$(Configuration)'=='ReleaseWinforms'">
<PackageReference Include="Microsoft.AspNetCore.Components.WebView.WindowsForms" Version="$(MicrosoftMauiControlsVersion)" />
<Reference Include="MercatorTunnel">
<HintPath>…\fw100Winforms\MercatorTunnel.dll</HintPath>
</Reference>
<Reference Include="MercatorUi">
<HintPath>…\fw100Winforms\MercatorUi.dll</HintPath>
</Reference>
<Reference Include="MercatorBlazorComponents">
<HintPath>…\fw100Winforms\MercatorBlazorComponents.dll</HintPath>
</Reference>
<Reference Include="MercatorPelican">
<HintPath>…\fw100Winforms\MercatorPelican.dll</HintPath>
</Reference>
</ItemGroup>
</Project>
⚠️ De verwijzingen naar de assemblies moeten overeenstemmen met de platformen. De compilatie mislukt als een mix van assemblies wordt vastgesteld.
De assemblies zijn beschikbaar in twee zipbestanden, die in aparte mappen uitgepakt moeten worden (bijvoorbeeld fw100Winforms en fw100Coreonly), en kunnen gedownload worden via:
Het project moet vervolgens minstens deze drie bestanden bevatten:
1. _Imports.razor
@using System.Net.Http
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Web
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.JSInterop
@using MercatorPelican
@using MercatorBlazorComponents
2. ToolKit.razor
@inherits MercatorPelican.BaseClasses.ToolKitBase
@implements MercatorPelican.Interfaces.IToolKit
@* Hier uw Blazor-markup *@
3. ToolKit.razor.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MercatorApi;
using MercatorExtensions;
using System.Data;
using Microsoft.JSInterop;
namespace ItemInfo
{
partial class ToolKit
{
public static MercatorPelican.ToolKitDescriptor Descriptor => new MercatorPelican.ToolKitDescriptor
{
TitleF = "Titel in het Frans",
TitleN = "Titel in het Nederlands",
TitleE = "Titel in het Engels",
TitleD = "Titel in het Duits",
DescriptionF = "Beschrijving in het Frans",
DescriptionN = "Beschrijving in het Nederlands",
DescriptionE = "Beschrijving in het Engels",
DescriptionD = "Beschrijving in het Duits",
BootstrapColums = MercatorPelican.ToolKitDescriptor.BootstrapColumsEnum.Sm12
};
public ToolKit()
{
Disposing += ToolKit_Disposing;
}
protected override void OnInitialized()
{
base.OnInitialized();
…
}
private void ToolKit_Disposing(object sender, EventArgs e)
{
Disposing -= ToolKit_Disposing;
…
}
}
}
Een ToolKit moet:
- Overerven van MercatorPelican.BaseClasses.ToolKitBase. Dit biedt met name
- Een overridable methode: ButtonPreviousClicked
- Een event Disposing
- De interface MercatorPelican.Interfaces.IToolKit implementeren. Ze vereist de aanwezigheid van ToolKitDescriptor Descriptor.
Deze klasse ToolKitDescriptor laat toe om verschillende parameters eigen aan de ToolKit vast te leggen:
- TitleF / N / E / D: titel in het Frans, Nederlands, Engels en Duits. Deze titel verschijnt op de knop waarmee je deze ToolKit opent.
- DescriptionF / N / E / D: beschrijving, die kleiner verschijnt in diezelfde knop
- MercatorUiMainInstanceNeeded: is de instantie van MercatorUi nodig voor deze ToolKit. Op true zetten bijvoorbeeld als een engine gebruikt wordt.
- MercatorReportingInitNeeded: als de vorige parameter true is, moet dan ook de afdrukengine van Mercator geactiveerd worden.
- SettingsType: type van een klasse (volgens conventie Settings) die toelaat om automatisch parameters toe te voegen in het bestand MercatorPelican.appsettings.json.
- BootstrapColums: laat toe om automatisch de bootstrapklasse van de 4de div te bepalen: col-sm-x col-sm-offset-y.
💡 Als men wil dat de 4 standaard-div's uitgeschakeld worden en de bootstrap-presentatie niet gebruikt wordt, moet men deze code in de ToolKit plaatsen:
protected override void OnInitialized()
{
base.OnInitialized();
MercatorPelican.Globals.ShowToolKitPage.ChangeDivClass(divContentClass: "", divContentStartClass: "", divContainerClass: "", ignoreBootstrapColums: true);
} ShowToolKitPage is de razor-component die uw ToolKit host.
De compilatie van het project moet twee keer uitgevoerd worden:
- Eén keer door in de configuratiekiezer DebugWinforms of ReleaseWinforms te kiezen: dit produceert de assembly voor Windows in \bin\DebugWinforms of \bin\ReleaseWinforms;
- De tweede keer door DebugCoreOnly of ReleaseCoreOnly te selecteren: dit produceert de assembly voor de andere platformen in \bin\DebugCoreOnly of \bin\ReleaseCoreOnly.
De aldus geproduceerde assemblies worden beschikbaar gemaakt voor MercatorPelican door ze te plaatsen in de SQL Bestanden / Anderen van de bijbehorende Mercator, in een map MercatorPelican, met twee submappen CoreOnly en Winforms. De submappen fr, nl, … bevatten de eventuele satellietassemblies met de resources volgens taal.

💡 De andere DLL's mogen niet in de SQL Bestanden geplaatst worden. MercatorPelican beschikt er al over omdat het dezelfde verwijzingen deelt.
Zodra een ToolKit op deze manier beschikbaar is gemaakt, volstaat het om aan MercatorPelican aan te geven dat het hem moet laden. Dit gebeurt via het bestand MercatorPelican.appsettings.json.
"ToolKits": "MyToolkit1,MyToolkit2",