Skip to content

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 dependencies section is omitted because it has no rows to report.
  • SAIF.NetCore.Services.Messaging consumes this package as one of the three documented implementation-to-implementation exceptions in Architecture.md (pinned version 1.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 version 10.2026.26267.1; BaseApiStartup.ConfigureMvcBuilder calls WithPingableController() for every API that inherits it.
  • Version drift exists between consumers: Messaging pins 1.3.20302.1 while ServiceExtensions pins 10.2026.26267.1. Compatibility between these two versions is unknown — the earlier package's implementation/API surface at 1.3.20302.1 was 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 calling AddControllersAsServices() 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 resolve null and surface as a PingServiceException rather than a startup-time failure*. The actual prerequisite is that each discovered pingable controller's concrete type be resolvable from DI by provider.GetService(type) — satisfied either by calling AddControllersAsServices() (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-registered IPingableService services need neither call. An equivalent explicit application-part registration plus a direct IControllerRetriever registration can satisfy the same prerequisites without WithPingableController().
  • Converting a thrown PingServiceException into a formatted HTTP 500 response depends on the host having DynamicErrorHandler (SAIF.NetCore.ServiceExtensions) installed and delegating to its injected IErrorHandler (the ErrorHandler class, SAIF.NetCore.ErrorHandler); this library does not itself reference or depend on either package*.

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.csproj
  • src/SAIF.NetCore.PingableService/SAIF.NetCore.PingableService/Controllers/PingableController.cs
  • src/SAIF.NetCore.PingableService/SAIF.NetCore.PingableService/Services/ControllerRetriever.cs
  • src/Messaging/src/SAIF.NetCore.Services.Messaging/SAIF.NetCore.Services.Messaging/SAIF.NetCore.Services.Messaging.csproj
  • src/SAIF.NetCore.ServiceExtensions/SAIF.NetCore.ServiceExtensions/SAIF.NetCore.ServiceExtensions/Startup/BaseApiStartup.cs
  • src/SAIF.NetCore.ServiceExtensions/SAIF.NetCore.ServiceExtensions/SAIF.NetCore.ServiceExtensions/Middleware/DynamicErrorHandler.cs
  • src/SAIF.NetCore.ErrorHandler/SAIF.NetCore.ErrorHandler/SAIF.NetCore.ErrorHandler/ErrorHandler.cs
  • Architecture.md