108 lines
6.4 KiB
Markdown
108 lines
6.4 KiB
Markdown
|
|
---
|
|||
|
|
source_files:
|
|||
|
|
- DataPRO/Modules/Groups/GroupList/GroupListModule.cs
|
|||
|
|
generated_at: "2026-04-16T04:45:30.391660+00:00"
|
|||
|
|
model: "Qwen/Qwen3-Coder-Next-FP8"
|
|||
|
|
schema_version: 1
|
|||
|
|
sha256: "eeab36663d49ff59"
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
# GroupList
|
|||
|
|
|
|||
|
|
### **1. Purpose**
|
|||
|
|
The `GroupListModule` is a Prism-based modular component responsible for registering the view and view model for the group list UI functionality within the application. It integrates with the Unity dependency injection container to expose `IGroupListView` and `IGroupListViewModel` as singleton registrations, enabling the module to be discovered and loaded dynamically by the Prism modularity framework. Additionally, it defines assembly-level metadata attributes (`GroupListModuleNameAttribute` and `GroupListModuleImageAttribute`) that supply identifying information (name, image, group, and region) for UI presentation—specifically, to render the module’s representation on the main screen under the *Prepare* group in the *GroupListRegion*.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### **2. Public Interface**
|
|||
|
|
|
|||
|
|
#### **Class: `GroupListModule`**
|
|||
|
|
- **`GroupListModule(IUnityContainer unityContainer)`**
|
|||
|
|
Constructor. Accepts a Unity container via dependency injection and stores it for later use in type registration.
|
|||
|
|
|
|||
|
|
- **`void Initialize()`**
|
|||
|
|
Registers two interfaces with the Unity container as singleton mappings:
|
|||
|
|
- `IGroupListView` → `GroupListView`
|
|||
|
|
- `IGroupListViewModel` → `GroupListViewModel`
|
|||
|
|
This method is called both directly during module initialization and indirectly via `RegisterTypes`.
|
|||
|
|
|
|||
|
|
- **`void OnInitialized(IContainerProvider containerProvider)`**
|
|||
|
|
Currently empty; no logic implemented.
|
|||
|
|
|
|||
|
|
- **`void RegisterTypes(IContainerRegistry containerRegistry)`**
|
|||
|
|
Delegates to `Initialize()` to perform the same type registrations. This is part of the Prism `IModule` lifecycle, though note it uses `IUnityContainer` internally rather than the `containerRegistry` parameter.
|
|||
|
|
|
|||
|
|
#### **Attribute: `GroupListModuleNameAttribute`**
|
|||
|
|
- **`AssemblyName` (read-only `string`)**
|
|||
|
|
Returns `"GroupList"` (via `AssemblyNames.GroupList.ToString()`).
|
|||
|
|
|
|||
|
|
- **`GetAttributeType()` → `Type`**
|
|||
|
|
Returns `typeof(TextAttribute)`.
|
|||
|
|
|
|||
|
|
- **`GetAssemblyName()` → `string`**
|
|||
|
|
Returns the value of `AssemblyName`.
|
|||
|
|
|
|||
|
|
#### **Attribute: `GroupListModuleImageAttribute`**
|
|||
|
|
- **`AssemblyImage` (read-only `BitmapImage`)**
|
|||
|
|
Loads and returns the image associated with the *GroupList* assembly via `AssemblyInfo.GetImage("GroupList")`.
|
|||
|
|
|
|||
|
|
- **`AssemblyName` (read-only `string`)**
|
|||
|
|
Returns `"GroupList"`.
|
|||
|
|
|
|||
|
|
- **`AssemblyGroup` (read-only `string`)**
|
|||
|
|
Returns `"Prepare"` (via `eAssemblyGroups.Prepare.ToString()`).
|
|||
|
|
|
|||
|
|
- **`AssemblyRegion` (read-only `eAssemblyRegion`)**
|
|||
|
|
Returns `eAssemblyRegion.GroupListRegion`.
|
|||
|
|
|
|||
|
|
- **`GetAttributeType()` → `Type`**
|
|||
|
|
Returns `typeof(ImageAttribute)`.
|
|||
|
|
|
|||
|
|
- **`GetAssemblyImage()` → `BitmapImage`**
|
|||
|
|
Returns the value of `AssemblyImage`.
|
|||
|
|
|
|||
|
|
- **`GetAssemblyName()` → `string`**
|
|||
|
|
Returns `"GroupList"`.
|
|||
|
|
|
|||
|
|
- **`GetAssemblyGroup()` → `string`**
|
|||
|
|
Returns `"Prepare"`.
|
|||
|
|
|
|||
|
|
- **`GetAssemblyRegion()` → `eAssemblyRegion`**
|
|||
|
|
Returns `eAssemblyRegion.GroupListRegion`.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### **3. Invariants**
|
|||
|
|
- The module **must** be loaded *after* the Unity container is initialized and available for injection (as it depends on `IUnityContainer`).
|
|||
|
|
- The `AssemblyNames.GroupList` enum value **must** resolve to `"GroupList"` for `AssemblyName` to be correct.
|
|||
|
|
- The `eAssemblyGroups.Prepare` enum value **must** resolve to `"Prepare"` for `AssemblyGroup` to be correct.
|
|||
|
|
- The `eAssemblyRegion.GroupListRegion` enum value **must** be defined and valid for `AssemblyRegion` to be correct.
|
|||
|
|
- The `AssemblyInfo.GetImage(...)` call **must** succeed and return a non-null `BitmapImage`; otherwise, `AssemblyImage` may be null (no explicit null-checking is present).
|
|||
|
|
- `Initialize()` is idempotent in practice (re-registering the same types is safe in Unity), but not explicitly guarded against duplicate registration.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### **4. Dependencies**
|
|||
|
|
|
|||
|
|
#### **Module Dependencies (Imports/Usings)**
|
|||
|
|
- **`DTS.Common`** and **`DTS.Common.Interface`** — Provides core types like `AssemblyNames`, `eAssemblyGroups`, `eAssemblyRegion`, `AssemblyInfo`, and attribute base classes (`TextAttribute`, `ImageAttribute`).
|
|||
|
|
- **`Prism.Modularity`** and **`Prism.Ioc`** — Required for implementing `IModule` and using Prism’s module infrastructure.
|
|||
|
|
- **`Unity`** — Specifically `IUnityContainer` and `IContainerRegistry`/`IContainerProvider` for DI.
|
|||
|
|
- **`System.ComponentModel.Composition`** — Likely used for `[Export]` (though Unity is used for actual DI).
|
|||
|
|
- **`System.Windows.Media.Imaging`** — For `BitmapImage` used in `AssemblyImage`.
|
|||
|
|
|
|||
|
|
#### **Module Consumers**
|
|||
|
|
- The Prism bootstrapper/module catalog (e.g., `ModuleCatalog`) consumes this module via the `[Export(typeof(IModule))]` and `[Module(ModuleName = "GroupListModule")]` attributes.
|
|||
|
|
- UI components (e.g., main shell) consume metadata from `GroupListModuleImageAttribute` to render the module’s icon, name, group, and region.
|
|||
|
|
- Other modules or services may depend on `IGroupListView` or `IGroupListViewModel` being registered in the container.
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
### **5. Gotchas**
|
|||
|
|
- **`RegisterTypes` ignores its parameter**: The method receives `IContainerRegistry containerRegistry` but internally calls `Initialize()`, which uses the injected `_unityContainer` (of type `IUnityContainer`) instead. This may cause confusion or breakage if the container registry is expected to be used.
|
|||
|
|
- **No error handling in image loading**: If `AssemblyInfo.GetImage("GroupList")` fails (e.g., missing image resource), `_img` may be `null`, and no fallback is provided.
|
|||
|
|
- **Redundant attribute constructors**: Both attributes have a redundant `string s` constructor parameter that is unused (assigned but never read).
|
|||
|
|
- **`OnInitialized` is empty**: Suggests incomplete implementation or legacy stub; no logic currently runs post-initialization.
|
|||
|
|
- **No explicit validation of registration order**: If other modules depend on `IGroupListView`/`IGroupListViewModel`, they must ensure `GroupListModule` is loaded first.
|
|||
|
|
- **Assembly-level attributes**: The attributes are applied at the assembly level (`[assembly: ...]`), meaning they are not tied to runtime module state—this is correct for metadata, but implies the image/name must be static and compile-time known.
|
|||
|
|
- **None identified from source alone.** *(Note: The above are inferred from code structure and patterns, not documented quirks.)*
|