--- source_files: - DTS Viewer/DTS.Viewer.Modules/DTS.Viewer.TestSummaryList/TestSummaryListModule.cs generated_at: "2026-04-16T11:06:42.997864+00:00" model: "zai-org/GLM-5-FP8" schema_version: 1 sha256: "b68514768022da67" --- # Documentation: TestSummaryListModule.cs ## 1. Purpose This module serves as a Prism-based module initializer for the Test Summary List feature within the DTS Viewer application. Its primary role is to register the view (`TestSummaryListView`) and view model (`TestSummaryViewListModel`) with the Unity dependency injection container, enabling the main application to discover and load this component. Additionally, it provides assembly-level metadata attributes that define the module's name, display image, region assignment, and group classification for use by the main shell's module management system. --- ## 2. Public Interface ### `TestSummaryListModule` (Class) **Signature:** `public class TestSummaryListModule : IModule` A Prism module that handles registration of the Test Summary List view and view model. | Member | Signature | Description | |--------|-----------|-------------| | Constructor | `TestSummaryListModule(IUnityContainer unityContainer)` | Accepts an injected `IUnityContainer` instance and stores it in `_unityContainer`. | | `Initialize` | `public void Initialize()` | Registers `ITestSummaryListView` → `TestSummaryListView` and `ITestSummaryListViewModel` → `TestSummaryViewListModel` with Unity. | | `OnInitialized` | `public void OnInitialized(IContainerProvider containerProvider)` | Empty implementation (no-op). | | `RegisterTypes` | `public void RegisterTypes(IContainerRegistry containerRegistry)` | Calls `Initialize()` to perform type registrations. | --- ### `TestSummaryListModuleNameAttribute` (Class) **Signature:** `public class TestSummaryListModuleNameAttribute : TextAttribute` Assembly-level attribute providing the module's name metadata. | Member | Signature | Description | |--------|-----------|-------------| | Constructor | `TestSummaryListModuleNameAttribute()` | Default constructor; sets `AssemblyName` to `AssemblyNames.TestSummaryList.ToString()`. | | Constructor | `TestSummaryListModuleNameAttribute(string s)` | Overload accepting a string parameter (unused). | | `AssemblyName` | `public override string AssemblyName { get; }` | Returns `AssemblyNames.TestSummaryList.ToString()`. | | `GetAttributeType` | `public override Type GetAttributeType()` | Returns `typeof(TextAttribute)`. | | `GetAssemblyName` | `public override string GetAssemblyName()` | Returns the `AssemblyName` property value. | --- ### `TestSummaryListModuleImageAttribute` (Class) **Signature:** `public class TestSummaryListModuleImageAttribute : ImageAttribute` Assembly-level attribute providing the module's image, name, group, and region metadata for display in the main application shell. | Member | Signature | Description | |--------|-----------|-------------| | Constructor | `TestSummaryListModuleImageAttribute()` | Default constructor; initializes `_img` via `AssemblyInfo.GetImage()`. | | Constructor | `TestSummaryListModuleImageAttribute(string s)` | Overload accepting a string parameter (unused). | | `AssemblyImage` | `public override BitmapImage AssemblyImage { get; }` | Lazy-loads and returns image via `AssemblyInfo.GetImage(AssemblyNames.TestSummaryList.ToString())`. | | `AssemblyName` | `public override string AssemblyName { get; }` | Returns `AssemblyNames.TestSummaryList.ToString()`. | | `AssemblyGroup` | `public override string AssemblyGroup { get; }` | Returns `eAssemblyGroups.Viewer.ToString()`. | | `AssemblyRegion` | `public override eAssemblyRegion AssemblyRegion { get; }` | Returns `eAssemblyRegion.TestSummaryRegion`. | | `GetAssemblyImage` | `public override BitmapImage GetAssemblyImage()` | Returns `AssemblyImage`. | | `GetAssemblyName` | `public override string GetAssemblyName()` | Returns `AssemblyName`. | | `GetAssemblyGroup` | `public override string GetAssemblyGroup()` | Returns `AssemblyGroup`. | | `GetAssemblyRegion` | `public override eAssemblyRegion GetAssemblyRegion()` | Returns `AssemblyRegion`. | | `GetAttributeType` | `public override Type GetAttributeType()` | Returns `typeof(ImageAttribute)`. | --- ## 3. Invariants - **Module Name Consistency:** The `Module` attribute's `ModuleName` property is hardcoded as `"TestSummaryList"` and must match the `AssemblyNames.TestSummaryList` enum value's string representation. - **Single Instance per Assembly:** Both assembly attributes use `AllowMultiple = false`, ensuring only one name and one image attribute can be applied per assembly. - **Region Assignment:** The module is always assigned to `eAssemblyRegion.TestSummaryRegion`. - **Group Assignment:** The module is always assigned to `eAssemblyGroups.Viewer`. - **Attribute Target:** Both attributes are restricted to `AttributeTargets.Assembly` only. --- ## 4. Dependencies ### This Module Depends On: | Dependency | Usage | |------------|-------| | `Prism.Ioc` | `IContainerProvider` interface for `OnInitialized` | | `Prism.Modularity` | `IModule` interface and `Module` attribute | | `Unity` | `IUnityContainer` for DI registration | | `System.Windows.Media.Imaging` | `BitmapImage` for module icon | | `DTS.Common` | `AssemblyNames` enum, `eAssemblyGroups` enum, `eAssemblyRegion` enum, `AssemblyInfo` static class | | `DTS.Common.Interface` | `TextAttribute`, `ImageAttribute` base classes | | `DTS.Viewer.TestSummaryList.ViewModel` | `ITestSummaryListViewModel`, `TestSummaryViewListModel` | | Local (same assembly) | `ITestSummaryListView`, `TestSummaryListView` | ### What Depends On This Module: - The main DTS Viewer shell application (inferred from Prism modularity pattern and assembly-level metadata attributes used for module discovery) --- ## 5. Gotchas 1. **Misleading Singleton Comment:** The comment on line 35 states "Register View & View-Model with Unity dependency injection container as a singleton," but `RegisterType()` registers types as **transient** by default in Unity, not as singletons. To register as singletons, `RegisterType(new ContainerControlledLifetimeManager())` or `RegisterSingleton()` should be used. The actual behavior may not match the comment's intent. 2. **Unusual View Model Class Name:** The concrete view model class is named `TestSummaryViewListModel` (line 39), which appears to be a typo or unconventional naming—typically one would expect `TestSummaryViewModel`. This is the actual class name in the source, not a documentation error. 3. **Redundant `Initialize()` Method:** The `Initialize()` method is public and called from `RegisterTypes()`, but it could be inlined. Having it public allows external code to call it, which could cause duplicate registrations. 4. **Unused Constructor Parameters:** Both attribute constructors accept a `string s` parameter that is never used in the constructor body. This appears to be boilerplate code required by the .NET attribute system for XAML or reflection usage. 5. **Lazy Initialization Side Effect:** The `AssemblyImage` property getter has a side effect—it assigns to `_img` on every get. While the constructor also initializes `_img`, the property getter will re-fetch the image each time, potentially causing unnecessary work if called repeatedly.