110 lines
5.8 KiB
Markdown
110 lines
5.8 KiB
Markdown
|
|
---
|
|||
|
|
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 application’s 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 Prism’s `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 Prism’s 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**
|
|||
|
|
- Prism’s 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 Prism’s 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.
|