Files

110 lines
5.8 KiB
Markdown
Raw Permalink Normal View History

2026-04-17 14:55:32 -04:00
---
source_files:
- DataPRO/Modules/SystemSettings/PowerAndBattery/PowerAndBatteryModule.cs
generated_at: "2026-04-16T04:39:36.503706+00:00"
model: "Qwen/Qwen3-Coder-Next-FP8"
schema_version: 1
sha256: "db7e4da125c7a0e8"
---
# PowerAndBattery
## Documentation: PowerAndBatteryModule
---
### **Purpose**
The `PowerAndBatteryModule` is a Prism-based modular component responsible for registering the view and view model for the Power & Battery feature within the applications UI. It enables lazy loading and dependency injection integration for the `PowerAndBatteryView` and `PowerAndBatteryViewModel` types via the Unity container. Additionally, it contributes metadata (specifically image and grouping information) to the main UI for visual identification and categorization of this module.
---
### **Public Interface**
#### **`PowerAndBatteryModule` Class**
- **`PowerAndBatteryModule(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:
- `IPowerAndBatteryView``PowerAndBatteryView`
- `IPowerAndBatteryViewModel``PowerAndBatteryViewModel`
This method is called both directly during module initialization and indirectly via `RegisterTypes`.
- **`void OnInitialized(IContainerProvider containerProvider)`**
Currently empty. No logic is executed during Prisms `OnInitialized` pipeline phase.
- **`void RegisterTypes(IContainerRegistry containerRegistry)`**
Delegates to `Initialize()` (which uses the injected `_unityContainer`, *not* `containerRegistry`).
⚠️ **Note**: The `containerRegistry` parameter is unused; registration occurs on the pre-injected `_unityContainer`, which may be inconsistent with Prisms intended `IContainerRegistry` usage.
#### **`PowerAndBatteryImageAttribute` Class**
- **`PowerAndBatteryImageAttribute()`**
Default constructor. Calls the overloaded constructor with `null`.
- **`PowerAndBatteryImageAttribute(string s)`**
Constructor accepting a string (unused in implementation). Loads and caches the assembly image via `AssemblyInfo.GetImage(AssemblyNames.PowerAndBattery.ToString())`.
- **`override BitmapImage AssemblyImage { get; }`**
Returns the cached `BitmapImage` loaded from the assembly resource for the PowerAndBattery module.
- **`override BitmapImage GetAssemblyImage()`**
Returns the value of `AssemblyImage`.
- **`override string AssemblyName { get; }`**
Returns `"PowerAndBattery"` (via `AssemblyNames.PowerAndBattery.ToString()`).
- **`override string GetAssemblyName()`**
Returns the value of `AssemblyName`.
- **`override string AssemblyGroup { get; }`**
Returns `"Administrative"` (via `eAssemblyGroups.Administrative.ToString()`).
- **`override string GetAssemblyGroup()`**
Returns the value of `AssemblyGroup`.
- **`override eAssemblyRegion AssemblyRegion { get; }`**
Throws `NotImplementedException`. *Always throws*; never returns a value.
- **`override eAssemblyRegion GetAssemblyRegion()`**
Delegates to `AssemblyRegion`, thus also throws `NotImplementedException`.
- **`override Type GetAttributeType()`**
Returns `typeof(ImageAttribute)`.
---
### **Invariants**
- The `PowerAndBatteryModule` must be loaded *after* the Unity container is available and *before* views/view models are resolved.
- `IPowerAndBatteryView` and `IPowerAndBatteryViewModel` must be registered exactly once per module load (enforced by singleton registration).
- `AssemblyImage` and `AssemblyName` are immutable after first access (cached in private fields `_img`, `_name`, `_group`).
- `AssemblyGroup` is *always* `"Administrative"` (hardcoded).
- `AssemblyRegion` and `GetAssemblyRegion()` are *never* functional — they always throw `NotImplementedException`.
---
### **Dependencies**
#### **Module Depends On**
- `Unity.IUnityContainer` — for type registration.
- `Prism.Modularity.IModule` — base interface for Prism modules.
- `DTS.Common` — specifically:
- `AssemblyInfo.GetImage(...)`
- `AssemblyNames.PowerAndBattery`
- `eAssemblyGroups.Administrative`
- `System.Windows.Media.Imaging.BitmapImage` — for image metadata.
- `System.ComponentModel.Composition.ExportAttribute` — for Prism module discovery.
#### **Module Is Used By**
- Prisms module catalog/loader (via `[Export(typeof(IModule))]` and `[Module(...)]` attributes).
- The main UI layer — via `PowerAndBatteryImageAttribute` applied at the assembly level (inferred from XML doc comment: *“used on the Main screen to display available components”*).
---
### **Gotchas**
- **`RegisterTypes` ignores its parameter**: The method accepts `IContainerRegistry containerRegistry` but internally calls `Initialize()`, which uses the injected `_unityContainer`. This is inconsistent with Prisms design (where `IContainerRegistry` is the expected registration mechanism) and may cause issues if the module is used in a non-Unity Prism environment or if `containerRegistry` is expected to be used.
- **`AssemblyRegion` is non-functional**: Both `AssemblyRegion` and `GetAssemblyRegion()` throw `NotImplementedException`. Any UI logic relying on region classification will fail at runtime.
- **Redundant field assignments**: Private fields (`_img`, `_name`, `_group`) are assigned in both the property getter and constructor, but the getter always returns the cached value — the constructor assignment is redundant.
- **Unused constructor parameter in `PowerAndBatteryImageAttribute(string s)`**: The `string s` parameter is never used.
- **No validation on image loading**: `AssemblyInfo.GetImage(...)` may throw if the assembly resource is missing or malformed; no error handling is present.
None identified beyond the above.