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