SAIF.NetCore.PingableService dependencies¶
SAIF.NetCore.PingableService takes a single internal NuGet package dependency on the foundation layer, SAIF.NetCore.ServiceContracts, a small set of Microsoft ASP.NET Core framework packages, and makes no outbound API calls of its own — it exposes only an inbound, hosted GET /Ping health endpoint.
Internal dependencies¶
| Dependency | Reference Type | Usage |
|---|---|---|
| SAIF.NetCore.ServiceContracts | NuGet Package (same-repo) | Supplies ISaifLogService (optional logger parameter type on IPingableService/PingableController) and HttpStatusCodeException, the base class of PingServiceException. |
External dependencies¶
| Dependency | Version | Usage |
|---|---|---|
Microsoft.Extensions.DependencyInjection |
3.1.9 | Supplies IServiceCollection, AddTransient/Scoped/Singleton, and GetRequiredService/GetService(s) used by the DI-registration extensions and ControllerRetriever. |
Microsoft.AspNetCore.App |
matches each TFM (FrameworkReference) |
Supplies ControllerBase, [Route], [ApiController], [HttpGet], [AllowAnonymous], IMvcBuilder, ApplicationPartManager, and AssemblyPart. |
Dependency risks and notes¶
- This library exposes only an inbound hosted endpoint (
GET /Ping) and makes no outbound API calls of its own, directly or through an internal library or package; the## API dependenciessection is omitted because it has no rows to report. SAIF.NetCore.Services.Messagingconsumes this package as one of the three documented implementation-to-implementation exceptions inArchitecture.md(pinned version1.3.20302.1), through the controller-discovery channel only (BackgroundConsumerServicesController : ControllerBase, IPingableService) — not through a direct runtime call into this library's implementation code*.SAIF.NetCore.ServiceExtensions(top layer) consumes this package under Central Package Management at version10.2026.26267.1;BaseApiStartup.ConfigureMvcBuildercallsWithPingableController()for every API that inherits it.- Version drift exists between consumers: Messaging pins
1.3.20302.1while ServiceExtensions pins10.2026.26267.1. Compatibility between these two versions is unknown — the earlier package's implementation/API surface at1.3.20302.1was not inspected, and no cross-version test exercises this version gap; the current (10.2026.26267.1) public surface being small is not, by itself, evidence that the older consumer's usage remains compatible.** WithPingableController()is the supported convenience path for the controller-discovery channel; pairing it with the host callingAddControllersAsServices()lets pingable controllers resolve by concrete type. Omitting that pairing, when the host has pingable controllers to discover and without equivalent concrete-type registrations, causes the controller-discovery channel to silently resolvenulland surface as aPingServiceExceptionrather than a startup-time failure*. The actual prerequisite is that each discovered pingable controller's concrete type be resolvable from DI byprovider.GetService(type)— satisfied either by callingAddControllersAsServices()(which registers every controller type this way) or by an equivalent explicit DI registration for each pingable controller's concrete type, independent of which registration API supplied it. Plain DI-registeredIPingableServiceservices need neither call. An equivalent explicit application-part registration plus a directIControllerRetrieverregistration can satisfy the same prerequisites withoutWithPingableController().- Converting a thrown
PingServiceExceptioninto a formatted HTTP 500 response depends on the host havingDynamicErrorHandler(SAIF.NetCore.ServiceExtensions) installed and delegating to its injectedIErrorHandler(theErrorHandlerclass,SAIF.NetCore.ErrorHandler); this library does not itself reference or depend on either package*.
Related documentation¶
- Index
- Overview
- Architecture
- Operations and processes
- Business rules
- Security and authorization
- Service registration
- API reference
- SAIF.NetCore.ServiceContracts
Note: Statements marked with
*were inferred from code structure, naming conventions, or contextual evidence where direct confirmation was not available in source artifacts. Statements marked with**could not be confirmed; treat as unknown until verified.
Sources¶
src/SAIF.NetCore.PingableService/SAIF.NetCore.PingableService/SAIF.NetCore.PingableService.csprojsrc/SAIF.NetCore.PingableService/SAIF.NetCore.PingableService/Controllers/PingableController.cssrc/SAIF.NetCore.PingableService/SAIF.NetCore.PingableService/Services/ControllerRetriever.cssrc/Messaging/src/SAIF.NetCore.Services.Messaging/SAIF.NetCore.Services.Messaging/SAIF.NetCore.Services.Messaging.csprojsrc/SAIF.NetCore.ServiceExtensions/SAIF.NetCore.ServiceExtensions/SAIF.NetCore.ServiceExtensions/Startup/BaseApiStartup.cssrc/SAIF.NetCore.ServiceExtensions/SAIF.NetCore.ServiceExtensions/SAIF.NetCore.ServiceExtensions/Middleware/DynamicErrorHandler.cssrc/SAIF.NetCore.ErrorHandler/SAIF.NetCore.ErrorHandler/SAIF.NetCore.ErrorHandler/ErrorHandler.csArchitecture.md