LazyMagic.Client.Base
⚡ Quick Answer
LazyMagic.Client.Base: Foundational client-side library for multi-platform Blazor applications. Provides configuration management, multi-language localization with unit conversion, JavaScript interop abstraction, and platform-specific implementations for WASM, MAUI, and Android platforms.
Overview
LazyMagic.Client.Base is a foundational client-side library that provides core infrastructure for building multi-platform Blazor applications. It offers configuration management, multi-language support with unit conversion, JavaScript interop abstraction, and platform-specific implementations for WASM, MAUI, and Android platforms.
Key Features
- Multi-Language Localization: Comprehensive message system with culture-specific loading and Imperial/Metric unit conversion
- Platform Abstraction: Unified interfaces for different deployment targets (WASM, MAUI, Android)
- Configuration Management: Hierarchical configuration system with tenant customization support
- JavaScript Interop: Type-safe abstraction for browser operations and cookie management
- Reactive Programming: Integration with ReactiveUI for automatic UI updates
- AWS Cognito Integration: Built-in support for AWS Cognito configuration
Core Classes
Configuration Management
ILzClientConfig / LzClientConfig
- Manages application configuration including authentication and tenancy settings
- Loads configuration from remote JSON files
- Supports multi-tenant configuration with override capabilities
- Handles AWS Cognito configuration settings
ILzHost / LzHost
- Central configuration for hosting environments
- Manages URLs for APIs, assets, and WebSocket connections
- Platform detection (IsWASM, IsMAUI, IsAndroid, IsLocal)
- Automatic localhost vs remote API switching
Localization System
ILzMessages / LzMessages
- Multi-language, multi-tenancy message management
- Culture-specific message loading from JSON files
- Imperial/Metric unit conversion in messages
- Real-time message editing capabilities
LzMessageSet
- Manages messages for specific culture and unit system
- Variable substitution using
__variable__
syntax
- Unit conversion functions:
@Unit()
and @UnitS()
- Lazy loading for performance
Supporting Classes
MessageDoc
- Container for message files with metadata
MsgItem
- Individual message with editability flags
MsgItemModel
/ MsgItemsModel
- ReactiveUI models for message editing
LzMessageSetSelector
- Culture and units selection helper
ILzJsUtilities
- JavaScript interop abstraction
- Comprehensive cookie management with
CookieOptions
- Local storage operations
- Image processing (base64 conversion, downsizing)
- Web sharing capabilities
- Asset and service worker management
IOSAccess
- File system abstraction for local and cloud storage
- Support for local file operations and S3
- HTTP read capabilities
IStaticAssets
- Static asset reading abstraction
- Specialized methods for configuration files
Base Classes
NotifyBase
- Lightweight INotifyPropertyChanged implementation
- Alternative to ReactiveUI for minimal overhead scenarios
- Property change callbacks with CallerMemberName support
Usage Examples
// Configure services
services.AddSingleton<ILzHost, LzHost>();
services.AddSingleton<ILzClientConfig, LzClientConfig>();
services.AddSingleton<ILzMessages, LzMessages>();
// Platform detection
if (LzHost.IsWASM)
{
// WASM-specific code
}
// Message localization
var messages = serviceProvider.GetService<ILzMessages>();
var welcomeMsg = messages.Msg("Welcome");
var distanceMsg = messages.Msg("Distance", "10"); // With unit conversion
// Cookie management
var jsUtils = serviceProvider.GetService<ILzJsUtilities>();
await jsUtils.SetCookie("theme", "dark", new CookieOptions
{
Secure = true,
SameSite = SameSiteMode.Strict
});
// Configuration loading
var config = serviceProvider.GetService<ILzClientConfig>();
await config.ConfigureAsync();
var authConfig = config.AuthConfig;
Message System Features
Variable Substitution
{
"WelcomeUser": "Welcome __username__!"
}
Unit Conversion
{
"Distance": "The distance is @Unit(km,mi,__value__)"
}
Tenant Customization
Messages are loaded with precedence:
- Sub-tenancy specific
- Tenancy specific
- System default
Configuration Hierarchy
- System Configuration: Base configuration for all tenants
- Tenancy Configuration: Tenant-specific overrides
- Sub-Tenancy Configuration: Further customization per sub-tenant
Key Patterns
- Interface-Based Design: All major components have interfaces for testability
- Async/Await: Modern async patterns for file and network operations
- Error Handling: Comprehensive error handling with console logging
- Dependency Injection: Designed for DI container registration
- Reactive Updates: Property change notifications with ReactiveUI
Dependencies
- ReactiveUI & ReactiveUI.Fody for reactive programming
- Microsoft.Extensions.Logging for logging
- Newtonsoft.Json for JSON operations
- LazyMagic.Shared for shared components