Infsoft.WPE.App.Base
1.1.5
Prefix Reserved
See the version list below for details.
dotnet add package Infsoft.WPE.App.Base --version 1.1.5
NuGet\Install-Package Infsoft.WPE.App.Base -Version 1.1.5
<PackageReference Include="Infsoft.WPE.App.Base" Version="1.1.5" />
paket add Infsoft.WPE.App.Base --version 1.1.5
#r "nuget: Infsoft.WPE.App.Base, 1.1.5"
// Install Infsoft.WPE.App.Base as a Cake Addin #addin nuget:?package=Infsoft.WPE.App.Base&version=1.1.5 // Install Infsoft.WPE.App.Base as a Cake Tool #tool nuget:?package=Infsoft.WPE.App.Base&version=1.1.5
Workplace Experience (WPE) App Base Library
This library contains attributes and interfaces required to implement dynamic apps.
SUMMARY: Your app should implement IAppExtensions and annotate components with the below attributes, any annotated component must implement AppComponent or AppJsComponent and can use it's method to resolve services registered in the
IAppExtensions.RegisterServices
method. Additionally you must define all used routes (that require authentication).
Attributes
The following attributes allow marking of Blazor components as specific components, which can be dynamically rendered in infsoft's Workplace Experience application.
App Fullscreen content of module (can hide navBar completely), allows arbitrary query (annotated by
[SupplyFromQuery]
) and static parameters (annotated with[Parameter]
)Tile Content to be rendered as tile, allows arbitrary static parameters (annotated with
[Parameter]
), but no query parametersNavEntry Entry to be rendered in the app's navbar, allows arbitrary static parameters (annotated with
[Parameter]
), but no query parametersPoIComponent Content to be rendered for a singular POI
This component requires the interface IPoIParameters to be implemented. Any PoI component receives the unique identifier of the PoI it was opened for, as well as any properties the PoI might specify, but in constrast to the other components no further parameters are allowed
Overlay Provides the possibility to render popups or other overlays ontop of the whole app
Notable changes to pre 1.0:
- No mobile attribute present or necessary, use media-queries instead.
- Reduced number of attribute entrypoints
- Interface changes to comply with new architecture of application
PoI Buttons
On any given PoI additional buttons can be displayed, if you wish to provide such an button implement the IPoIButton interface and annotate your class with the PoIButton attribute. Buttons are shown above any of the PoI components.
Defining Route mappings
This section is only relevant for the web application, native apps will ignore the mappings.
The application utilizes a Backend for Frontend (BFF)
pattern, as such all requests that require authentication/authorization on the backend, must be proxied by the web backend.
To achieve this dynamically, each app must define the mappings as assembly attributes by including the attribute in the project file (.csproj).
Every request made by your app, will be filtered according to your mappings and whenever a request is made towards a defined baseUrl, it is replaced with the web app's base url and a dynamically generated hash.
Then the request is made towards the web backend, which utilizes the application cookie to authorize the request and proxy it to your original URL and then returning the backend's response.
Sample:
<ItemGroup>
<AssemblyAttribute Include = "Infsoft.WPE.App.Base.RouteMappingAttribute">
<_Parameter1>https://postman-echo.com</_Parameter1>
</AssemblyAttribute>
<AssemblyAttribute Include = "Infsoft.WPE.App.Base.RouteMappingAttribute">
<_Parameter1> https://localhost:5003</_Parameter1>
</AssemblyAttribute>
</ItemGroup>
Dependency Injection
Services can be registered with the container for Dependency Injection. Simply follow the below guidelines.
Service registration
Every developed module might require the registration of services for dependency injection.
To allow this, an extension point is provided by implementing the corresponding IAppExtensions interface.
Every service, that is registered with the RegisterServices
method, will be registered in a custom scope unique to the module.
This allows for quick dynamic assembly loading after startup.
Service injection
To inject your services, two possiblities exist:
- In normal
.cs
files, you can use constructor injection as you would anywhere else - In razor components, you have to inherit from the provided AppComponent or AppJsComponent and use the provided method to set your service instances.
Services, that are provided globally (by infsoft), e.g. the JavaScript runtime, can be injected with the
@inject
directive. Sample:@using Infsoft.WPE.App.Modules.Base @inherits AppComponent @inject IJSRuntime JSRuntime @code { private ISampleService SampleService; protected override void OnInitialized() { base.OnInitialized(); SampleService = GetService<ISampleService>(); } }
JavaScript Modules
One caveat of separating the assemblies in different contexts, is that you cannot directly inject IJSRuntime
into your code wrapper for the JavaScript code.
You can only use IJSRuntime
by injecting it in the razor classes and then passing it along to your module class as a method parameter.
Therefore, if you do not have JS code shared between multiple razor classes, you can simply inherit from AppJsComponent.
This class provides you with InvokeVoidAsync
and InvokeAsync
methods, which will automatically load your module scoped JavaScript.
Sub components
While inheriting from AppComponent and AppJsComponent works for direct entry points like tiles, PoI components and such, you might want to structure your code into more components.
Components referenced by your components (such a single tile) must not implement one of the above mentioned base classes, instead inherit from SubComponent. This is necessary to receive the correct localization definition required for all localization as a cascading value.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
-
net8.0
- Autofac (>= 8.1.1)
- Infsoft.WPE.App.DTO (>= 1.2.2)
- Microsoft.AspNetCore.Components.Web (>= 8.0.10)
NuGet packages (3)
Showing the top 3 NuGet packages that depend on Infsoft.WPE.App.Base:
Package | Downloads |
---|---|
Infsoft.WPE.App.UIComponents
Basic components for developing modules used in infsoft's Workplace Experience application |
|
Infsoft.WPE.App.Authentication.Base
Base authentication library used in platform dependent auth libraries (Infsoft.WPE.App.Authentication.Web and Infsoft.WPE.App.Authentication.Maui) for infsoft's Workplace Experience application |
|
Infsoft.WPE.App.Test
Base library for bunit tests, allowing to inject scoped autoFac services |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
1.1.7 | 246 | 11/19/2024 |
1.1.6 | 887 | 11/7/2024 |
1.1.5 | 77 | 11/7/2024 |
1.1.4 | 71 | 11/7/2024 |
1.1.3 | 146 | 11/4/2024 |
1.1.2 | 116 | 11/4/2024 |
1.1.1 | 142 | 10/31/2024 |
1.1.0 | 707 | 10/18/2024 |
1.0.0 | 512 | 9/26/2024 |
1.0.0-next28 | 174 | 9/23/2024 |
1.0.0-next27 | 647 | 7/26/2024 |
1.0.0-next26 | 74 | 7/26/2024 |
1.0.0-next25 | 98 | 7/26/2024 |
1.0.0-next24 | 127 | 7/24/2024 |
1.0.0-next23 | 94 | 7/23/2024 |
1.0.0-next22 | 103 | 7/22/2024 |
1.0.0-next21 | 82 | 7/22/2024 |
1.0.0-next20 | 95 | 7/15/2024 |
1.0.0-next19 | 72 | 7/15/2024 |
1.0.0-next18 | 92 | 7/5/2024 |
1.0.0-next17 | 87 | 7/4/2024 |
1.0.0-next16 | 72 | 7/4/2024 |
1.0.0-next15 | 97 | 7/1/2024 |
1.0.0-next14 | 81 | 7/1/2024 |
1.0.0-next13 | 78 | 7/1/2024 |
1.0.0-next12 | 74 | 7/1/2024 |
1.0.0-next11 | 80 | 7/1/2024 |
1.0.0-next10 | 79 | 6/27/2024 |
1.0.0-next09 | 97 | 6/19/2024 |
1.0.0-next08 | 102 | 6/4/2024 |
1.0.0-next07 | 104 | 6/3/2024 |
1.0.0-next06 | 247 | 5/23/2024 |
1.0.0-next05 | 87 | 5/23/2024 |
1.0.0-next04 | 86 | 5/22/2024 |
1.0.0-next03 | 81 | 5/21/2024 |
1.0.0-next02 | 79 | 5/21/2024 |
1.0.0-next01 | 81 | 5/21/2024 |
1.0.0-next | 84 | 5/21/2024 |