--- 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.