69 lines
5.5 KiB
Markdown
69 lines
5.5 KiB
Markdown
|
|
---
|
|||
|
|
source_files:
|
|||
|
|
- DataPRO/Modules/TestSetups/Diagnostics/DiagnosticsModule.cs
|
|||
|
|
generated_at: "2026-04-16T04:49:11.269350+00:00"
|
|||
|
|
model: "Qwen/Qwen3-Coder-Next-FP8"
|
|||
|
|
schema_version: 1
|
|||
|
|
sha256: "b958e3011c307915"
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# Diagnostics
|
|||
|
|
|
|||
|
|
## Documentation: DiagnosticsModule
|
|||
|
|
|
|||
|
|
### 1. Purpose
|
|||
|
|
The `DiagnosticsModule` is a Prism module responsible for initializing and registering the diagnostics view and view model within the application’s dependency injection container (Unity). It enables the diagnostics functionality as a modular component in the system, integrating with the UI framework via Prism’s module loading mechanism and Unity for dependency injection. The module also exposes metadata attributes (`DiagnosticsModuleNameAttribute`, `DiagnosticsModuleImageAttribute`) that provide identifying information (name, image, group, region) for the diagnostics module to be displayed in the main UI (e.g., a summary or navigation screen).
|
|||
|
|
|
|||
|
|
### 2. Public Interface
|
|||
|
|
- **`DiagnosticsModule(IUnityContainer unityContainer)`**
|
|||
|
|
Constructor. Accepts a Unity container via dependency injection and stores it for later use in type registration.
|
|||
|
|
|
|||
|
|
- **`void Initialize()`**
|
|||
|
|
Registers two interfaces to their concrete implementations as singleton types in the Unity container:
|
|||
|
|
- `IDiagnosticsTreeView` → `DiagnosticsTreeView`
|
|||
|
|
- `IDiagnosticsViewModel` → `DiagnosticsViewModel`
|
|||
|
|
This method is called both directly from the constructor (via `RegisterTypes`) and explicitly during Prism’s module initialization lifecycle.
|
|||
|
|
|
|||
|
|
- **`void OnInitialized(IContainerProvider containerProvider)`**
|
|||
|
|
Empty implementation. No logic is executed during Prism’s `OnInitialized` phase.
|
|||
|
|
|
|||
|
|
- **`void RegisterTypes(IContainerRegistry containerRegistry)`**
|
|||
|
|
Delegates to `Initialize()`. Note: Although the parameter `containerRegistry` is of type `IContainerRegistry` (Prism’s abstraction), the implementation uses the injected `IUnityContainer` instead—*not* the `containerRegistry* parameter.
|
|||
|
|
|
|||
|
|
- **`DiagnosticsModuleNameAttribute` class**
|
|||
|
|
Assembly-level attribute. Provides the module’s name (`AssemblyNames.Diagnostics.ToString()`) via its `AssemblyName` property. Inherits from `TextAttribute`.
|
|||
|
|
|
|||
|
|
- **`DiagnosticsModuleImageAttribute` class**
|
|||
|
|
Assembly-level attribute. Provides metadata for UI presentation:
|
|||
|
|
- `AssemblyImage`: `BitmapImage` loaded via `AssemblyInfo.GetImage(AssemblyNames.Diagnostics.ToString())`
|
|||
|
|
- `AssemblyName`: Same as above
|
|||
|
|
- `AssemblyGroup`: `eAssemblyGroups.Prepare.ToString()`
|
|||
|
|
- `AssemblyRegion`: `eAssemblyRegion.DiagnosticsRegion`
|
|||
|
|
Inherits from `ImageAttribute`.
|
|||
|
|
|
|||
|
|
### 3. Invariants
|
|||
|
|
- The `DiagnosticsModule` must be loaded *after* the Unity container is available and *before* views/view models are resolved.
|
|||
|
|
- `IDiagnosticsTreeView` and `IDiagnosticsViewModel` must be registered as singletons; no other lifetimes are specified.
|
|||
|
|
- The `AssemblyNames.Diagnostics` and `eAssemblyGroups.Prepare` and `eAssemblyRegion.DiagnosticsRegion` constants must be defined elsewhere (not in this file); their values are assumed to be stable and non-null.
|
|||
|
|
- The `AssemblyInfo.GetImage(...)` call must succeed for `DiagnosticsModuleImageAttribute` to initialize without exception; failure would cause a runtime error at attribute instantiation (e.g., during assembly load).
|
|||
|
|
- The `Initialize()` method is idempotent *within the same container instance* (repeated calls re-register the same mappings), but Unity does not prevent duplicate registrations.
|
|||
|
|
|
|||
|
|
### 4. Dependencies
|
|||
|
|
**Dependencies *of* this module:**
|
|||
|
|
- `DTS.Common`, `DTS.Common.Interface`, `DTS.Common.Interface.TestSetups.Diagnostics` — likely contain shared contracts (`IDiagnosticsTreeView`, `IDiagnosticsViewModel`, `AssemblyNames`, `eAssemblyGroups`, `eAssemblyRegion`, `AssemblyInfo`, `TextAttribute`, `ImageAttribute`).
|
|||
|
|
- `Prism.Modularity` — for `IModule` interface.
|
|||
|
|
- `Prism.Ioc` — for `IContainerRegistry`.
|
|||
|
|
- `Unity` — for `IUnityContainer`.
|
|||
|
|
- `System.Windows.Media.Imaging` — for `BitmapImage`.
|
|||
|
|
|
|||
|
|
**Dependencies *on* this module:**
|
|||
|
|
- Any module or component that requires `IDiagnosticsTreeView` or `IDiagnosticsViewModel` (e.g., a view that consumes diagnostics data).
|
|||
|
|
- The main shell/UI layer likely uses `DiagnosticsModuleNameAttribute` and `DiagnosticsModuleImageAttribute` to populate a module summary or navigation UI.
|
|||
|
|
|
|||
|
|
### 5. Gotchas
|
|||
|
|
- **`RegisterTypes` ignores its parameter**: Despite accepting `IContainerRegistry containerRegistry`, the method calls `Initialize()`, which uses the *private `IUnityContainer` field* instead. This tightly couples the module to Unity and breaks Prism’s container-agnostic design.
|
|||
|
|
- **Attribute initialization side effects**: `DiagnosticsModuleImageAttribute` performs I/O (`AssemblyInfo.GetImage(...)`) in its constructor and property getters. This may cause delays or failures during assembly loading or reflection-based discovery.
|
|||
|
|
- **No `OnInitialized` logic**: The `OnInitialized` method is empty, suggesting initialization logic was either removed or never implemented.
|
|||
|
|
- **Redundant attribute properties**: `AssemblyName`, `AssemblyGroup`, etc., are computed in both the property getter *and* constructor, and stored in private fields — likely legacy or redundant.
|
|||
|
|
- **Missing validation**: No checks for null `AssemblyNames.Diagnostics` or missing image resources; failures are silent or cause exceptions at runtime.
|
|||
|
|
- **No tests or documentation for attribute usage**: Behavior of how/when these attributes are consumed (e.g., by a module discovery service) is not evident from this file.
|