83 lines
6.1 KiB
Markdown
83 lines
6.1 KiB
Markdown
|
|
---
|
|||
|
|
source_files:
|
|||
|
|
- DataPRO/Modules/SystemSettings/ISOSettings/ISOSettingsModule.cs
|
|||
|
|
generated_at: "2026-04-16T04:39:52.161658+00:00"
|
|||
|
|
model: "Qwen/Qwen3-Coder-Next-FP8"
|
|||
|
|
schema_version: 1
|
|||
|
|
sha256: "d9b10982c2687d59"
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# ISOSettings
|
|||
|
|
|
|||
|
|
## Documentation: ISOSettingsModule
|
|||
|
|
|
|||
|
|
### 1. Purpose
|
|||
|
|
The `ISOSettingsModule` is a Prism module responsible for bootstrapping and registering the ISO Settings feature within the application’s modular UI architecture. It integrates with the Unity dependency injection container to register the view (`ISOSettingsView`) and view model (`ISOSettingsViewModel`) as singleton services, enabling their later resolution and use in the UI. Additionally, it exposes metadata about the module (e.g., display name, group, and icon) via the `ISOSettingsImageAttribute` assembly-level attribute, allowing the main shell to render the module on the main screen under the *Administrative* group.
|
|||
|
|
|
|||
|
|
### 2. Public Interface
|
|||
|
|
|
|||
|
|
#### `ISOSettingsModule` class
|
|||
|
|
- **`ISOSettingsModule(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:
|
|||
|
|
- `IISOSettingsView` → `ISOSettingsView`
|
|||
|
|
- `IISOSettingsViewModel` → `ISOSettingsViewModel`
|
|||
|
|
This method is called both directly during module initialization and indirectly via `RegisterTypes`.
|
|||
|
|
- **`void OnInitialized(IContainerProvider containerProvider)`**
|
|||
|
|
Currently empty. No initialization logic is performed after module registration.
|
|||
|
|
- **`void RegisterTypes(IContainerRegistry containerRegistry)`**
|
|||
|
|
Delegates to `Initialize()` to perform type registration. Note: Although the method signature uses `IContainerRegistry` (Prism’s abstraction), the implementation uses the injected `IUnityContainer` directly—this may indicate a mismatch or legacy pattern.
|
|||
|
|
|
|||
|
|
#### `ISOSettingsImageAttribute` class
|
|||
|
|
- **`ISOSettingsImageAttribute()`**
|
|||
|
|
Default constructor; delegates to the parameterized constructor with `null`.
|
|||
|
|
- **`ISOSettingsImageAttribute(string s)`**
|
|||
|
|
Constructor accepting a string argument (unused); initializes `_img` by calling `AssemblyInfo.GetImage(AssemblyNames.IsoSettings.ToString())`.
|
|||
|
|
- **`override BitmapImage AssemblyImage { get; }`**
|
|||
|
|
Returns the assembly’s icon image, retrieved via `AssemblyInfo.GetImage(AssemblyNames.IsoSettings.ToString())`.
|
|||
|
|
- **`override string AssemblyName { get; }`**
|
|||
|
|
Returns `"IsoSettings"` (via `AssemblyNames.IsoSettings.ToString()`).
|
|||
|
|
- **`override string AssemblyGroup { get; }`**
|
|||
|
|
Returns `"Administrative"` (via `eAssemblyGroups.Administrative.ToString()`).
|
|||
|
|
- **`override eAssemblyRegion AssemblyRegion { get; }`**
|
|||
|
|
Throws `NotImplementedException`.
|
|||
|
|
- **`override eAssemblyRegion GetAssemblyRegion()`**
|
|||
|
|
Throws `NotImplementedException`.
|
|||
|
|
- **`override Type GetAttributeType()`**
|
|||
|
|
Returns `typeof(ImageAttribute)`.
|
|||
|
|
- **`override BitmapImage GetAssemblyImage()`**
|
|||
|
|
Returns `AssemblyImage`.
|
|||
|
|
- **`override string GetAssemblyName()`**
|
|||
|
|
Returns `AssemblyName`.
|
|||
|
|
- **`override string GetAssemblyGroup()`**
|
|||
|
|
Returns `AssemblyGroup`.
|
|||
|
|
|
|||
|
|
> **Note**: Several members (`AssemblyRegion`, `GetAssemblyRegion()`) are unimplemented and throw exceptions at runtime if invoked.
|
|||
|
|
|
|||
|
|
### 3. Invariants
|
|||
|
|
- The `ISOSettingsModule` must be loaded *before* any consumer attempts to resolve `IISOSettingsView` or `IISOSettingsViewModel`, as registration occurs only during `Initialize()`/`RegisterTypes()`.
|
|||
|
|
- `AssemblyInfo.GetImage()` and `AssemblyNames.IsoSettings` must be valid and return non-null values at runtime; otherwise, `AssemblyImage` will fail.
|
|||
|
|
- The `AssemblyGroup` is hardcoded to `"Administrative"` and cannot be changed without recompilation.
|
|||
|
|
- The `ISOSettingsImageAttribute` is intended for use as an assembly-level attribute (via `[assembly: ISOSettingsImageAttribute]`), but its implementation is incomplete—`AssemblyRegion` and related methods are non-functional.
|
|||
|
|
|
|||
|
|
### 4. Dependencies
|
|||
|
|
- **Imports/Dependencies**:
|
|||
|
|
- `DTS.Common` and `DTS.Common.Interface` (for `AssemblyInfo`, `AssemblyNames`, `eAssemblyGroups`, `ImageAttribute`, `eAssemblyRegion`)
|
|||
|
|
- `Prism.Modularity` (for `IModule`)
|
|||
|
|
- `Prism.Ioc` (for `IContainerRegistry`)
|
|||
|
|
- `Unity` (for `IUnityContainer`)
|
|||
|
|
- `System.ComponentModel.Composition` (for `[Export]`)
|
|||
|
|
- `System.Windows.Media.Imaging` (for `BitmapImage`)
|
|||
|
|
|
|||
|
|
- **Depended upon by**:
|
|||
|
|
- The Prism module catalog/loader (via `[Export(typeof(IModule))]` and `[Module(ModuleName = "ISOSettings")]`)
|
|||
|
|
- The main shell/application UI (via the `ISOSettingsImageAttribute` assembly attribute, used to display module metadata on the main screen)
|
|||
|
|
|
|||
|
|
### 5. Gotchas
|
|||
|
|
- **`RegisterTypes` uses `IContainerRegistry` but internally relies on `IUnityContainer`**: The method signature suggests Prism’s DI abstraction, but the implementation uses the injected Unity container directly. This may cause confusion or breakage if the module is used with a non-Unity container.
|
|||
|
|
- **`AssemblyRegion` and `GetAssemblyRegion()` are unimplemented**: Any attempt to access these will throw `NotImplementedException`. This may be intentional (unused code path) or technical debt.
|
|||
|
|
- **Redundant `Initialize()` call in `RegisterTypes`**: Since `Initialize()` is called directly in `RegisterTypes`, and `Initialize()` is also called during Prism’s `Initialize()` lifecycle, there is potential for double-registration if `RegisterTypes` is invoked multiple times (though Unity registrations are idempotent for singleton mappings).
|
|||
|
|
- **Unused constructor parameter in `ISOSettingsImageAttribute(string s)`**: The `s` parameter is ignored.
|
|||
|
|
- **No validation on image retrieval**: If `AssemblyInfo.GetImage()` returns `null` (e.g., missing image resource), `AssemblyImage` will silently return `null`, potentially causing UI rendering issues.
|
|||
|
|
- **Hardcoded string values**: `"IsoSettings"` and `"Administrative"` are derived from enumToString() calls; while safer than literals, they assume the underlying enums (`AssemblyNames`, `eAssemblyGroups`) are correctly defined and stable.
|