Files

76 lines
5.9 KiB
Markdown
Raw Permalink Normal View History

2026-04-17 14:55:32 -04:00
---
source_files:
- DTS Viewer/DTS.Viewer.Reports/DTS.Viewer.PSDReportSettings/PSDReportSettingsModule.cs
generated_at: "2026-04-16T10:59:04.135002+00:00"
model: "zai-org/GLM-5-FP8"
schema_version: 1
sha256: "272bb780c04413d3"
---
# Documentation: PSDReportSettingsModule
## 1. Purpose
This module serves as the entry point for the "PSD Report Settings" feature within the DTS Viewer application. It is a Prism Module (`PSDReportSettingsModule`) responsible for registering its associated View, ViewModel, and Model dependencies with the Unity dependency injection container. Additionally, it defines assembly-level attributes to expose metadata (name, image, grouping, and region) to the main application shell, allowing the module to be discovered and displayed in the UI as an available component.
## 2. Public Interface
### Classes
**`PSDReportSettingsModule`**
Inherits from: `IModule`
* `PSDReportSettingsModule(IUnityContainer unityContainer)`: Constructor that accepts a `IUnityContainer` instance and stores it in a readonly field.
* `void RegisterTypes(IContainerRegistry containerRegistry)`: Implements `IModule.RegisterTypes`. Executes the `Initialize()` method to register types with the container.
* `void OnInitialized(IContainerProvider containerProvider)`: Implements `IModule.OnInitialized`. Currently contains no implementation logic.
* `void Initialize()`: Registers the following interface-to-concrete-type mappings using the injected `_unityContainer`:
* `IPSDReportSettingsViewModel``PSDReportSettingsViewModel`
* `IPSDReportSettingsModel``PSDReportSettingsModel`
* `IPSDReportSettingsView``PSDReportSettingsView`
**`PSDReportSettingsModuleNameAttribute`**
Inherits from: `TextAttribute`
* `[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]`
* `PSDReportSettingsModuleNameAttribute()`: Default constructor.
* `PSDReportSettingsModuleNameAttribute(string s)`: Overloaded constructor (parameter `s` is unused).
* `string AssemblyName { get; }`: Overrides the base property. Returns the string representation of `AssemblyNames.PSDReportSettings`.
* `Type GetAttributeType()`: Returns `typeof(TextAttribute)`.
* `string GetAssemblyName()`: Returns the value of the `AssemblyName` property.
**`PSDReportSettingsModuleImageAttribute`**
Inherits from: `ImageAttribute`
* `[AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)]`
* `PSDReportSettingsModuleImageAttribute()`: Default constructor.
* `PSDReportSettingsModuleImageAttribute(string s)`: Overloaded constructor (parameter `s` is unused).
* `BitmapImage AssemblyImage { get; }`: Returns a `BitmapImage` retrieved via `AssemblyInfo.GetImage(AssemblyNames.PSDReportSettings.ToString())`.
* `string AssemblyName { get; }`: Returns the string representation of `AssemblyNames.PSDReportSettings`.
* `string AssemblyGroup { get; }`: Returns `eAssemblyGroups.Viewer.ToString()`.
* `eAssemblyRegion AssemblyRegion { get; }`: Returns `eAssemblyRegion.PSDReportSettingsRegion`.
* `Type GetAttributeType()`: Returns `typeof(ImageAttribute)`.
* `BitmapImage GetAssemblyImage()`: Returns `AssemblyImage`.
* `string GetAssemblyName()`: Returns `AssemblyName`.
* `string GetAssemblyGroup()`: Returns `AssemblyGroup`.
* `eAssemblyRegion GetAssemblyRegion()`: Returns `AssemblyRegion`.
## 3. Invariants
* **Module Name:** The module is identified by the string `"PSDReportSettings"` in the `[Module]` attribute.
* **Assembly Group:** The module belongs to the `Viewer` assembly group (defined by `eAssemblyGroups.Viewer`).
* **Region:** The module is associated with the `PSDReportSettingsRegion` (defined by `eAssemblyRegion.PSDReportSettingsRegion`).
* **Registration:** The types `IPSDReportSettingsViewModel`, `IPSDReportSettingsModel`, and `IPSDReportSettingsView` are registered with the Unity container as transient types (default `RegisterType` behavior) upon module initialization.
## 4. Dependencies
**Internal Dependencies (referenced types):**
* `DTS.Common`: Uses `AssemblyNames` enum.
* `DTS.Common.Interface`: Uses `TextAttribute`, `ImageAttribute`, `eAssemblyGroups`, `eAssemblyRegion`. Also implies the existence of `IPSDReportSettingsViewModel`, `IPSDReportSettingsModel`, and `IPSDReportSettingsView` interfaces.
* `DTS.Viewer.PSDReportSettings`: Uses `PSDReportSettingsViewModel`, `PSDReportSettingsModel`, `PSDReportSettingsView` concrete classes and `AssemblyInfo` static class.
**External Frameworks:**
* `Prism.Ioc`: Uses `IContainerProvider`, `IContainerRegistry`.
* `Prism.Modularity`: Uses `IModule`, `ModuleAttribute`.
* `Unity`: Uses `IUnityContainer`.
* `System.Windows.Media.Imaging`: Uses `BitmapImage`.
## 5. Gotchas
* **Ignored Constructor Parameters:** Both `PSDReportSettingsModuleNameAttribute` and `PSDReportSettingsModuleImageAttribute` have constructors that accept a `string s` parameter, but this parameter is completely ignored in the logic. It is unclear why this parameter exists.
* **Mixed Container Usage:** The `RegisterTypes` method receives an `IContainerRegistry` (Prism abstraction) but the actual registration logic inside `Initialize()` uses the injected `IUnityContainer` (Unity specific). This bypasses the Prism abstraction layer, which could cause issues if the container implementation details differ or if the container wrapper is expected to manage lifestyle scopes.
* **Property Getter Side Effects:** In `PSDReportSettingsModuleImageAttribute`, the `AssemblyImage` property getter performs a method call `AssemblyInfo.GetImage(...)` and assigns it to the private field `_img` every time the getter is accessed. This is not a pure getter; it causes a new image lookup (and potentially a new object allocation) on every read access, rather than returning a cached value.
* **Empty OnInitialized:** The `OnInitialized` method is empty. If the module requires runtime initialization logic (like starting services or registering region views), it is not present here. The module currently only performs type registration.