Shiny .NET v4 is here with BLE Windows Support, Improved GPS, & More!Check It Out
Introducing Shiny .NET Controls: TableView, Scheduler, ChatView, ImageEditor, and more!Learn More
Shiny .NET Health Beta is now available!Learn More
Shiny.Music v2 is here with Volume Control, Lyrics, Album Art, and more!Check It Out
Architecture
Shiny is built around three core concepts: Services, Delegates, and Observables. These form the foundation of every Shiny library and understanding them will help you use Shiny effectively.
Shiny is designed as a unified framework — not a collection of independent plugins. Under the hood, it manages storage, logging, platform lifecycle hooks, and cross-platform utilities so you don’t have to.
Services are the primary API you interact with. They are registered with dependency injection and provide the interface for controlling platform features.
// Inject and use services directly
IGpsManagergpsManager; // injected
await gpsManager.StartListener(newGpsRequest
{
UseBackground =true
});
Services follow standard .NET DI patterns — register once, inject anywhere.
Delegates
Delegates are your callback handlers for background events. They are registered at startup and called by Shiny when platform events fire — even when your app isn’t in the foreground.
publicclassMyGpsDelegate : IGpsDelegate
{
publicTaskOnReading(IGpsReadingreading)
{
// Handle GPS reading in background
}
}
Delegates support full dependency injection and are treated as singletons.
Observables
Shiny uses Reactive Extensions (Rx) for real-time event streams. Observables give you powerful composition, filtering, and lifecycle management for platform events.
gpsManager
.WhenReading()
.Where(x=> x.Speed >10)
.Subscribe(reading=> {
// Reactive GPS stream
});
Observables are ideal for UI binding and foreground scenarios.