init
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
---
|
||||
source_files:
|
||||
- DataPRO/Modules/Groups/GroupChannelList/GroupChannelListModule.cs
|
||||
generated_at: "2026-04-16T04:44:06.724645+00:00"
|
||||
model: "Qwen/Qwen3-Coder-Next-FP8"
|
||||
schema_version: 1
|
||||
sha256: "3066a4421ff164bf"
|
||||
---
|
||||
|
||||
# GroupChannelList
|
||||
|
||||
## Documentation: `GroupChannelListModule`
|
||||
|
||||
---
|
||||
|
||||
### 1. Purpose
|
||||
The `GroupChannelListModule` is a Prism-based modular component responsible for registering the view and view model types associated with the group channel list UI functionality. It integrates into the application’s modular architecture by implementing `IModule`, and uses Unity as its dependency injection container to register key UI components (`IGroupChannelListViewModel`, `IGroupChannelListView`, and `IGroupChannelSettingsListView`) as singleton services. Additionally, it exposes assembly-level metadata via custom attributes (`GroupChannelListModuleNameAttribute`, `GroupChannelListModuleImageAttribute`) to support dynamic discovery and UI presentation (e.g., in a module summary screen), including image, name, group, and region information.
|
||||
|
||||
---
|
||||
|
||||
### 2. Public Interface
|
||||
|
||||
#### `GroupChannelListModule`
|
||||
- **`public GroupChannelListModule(IUnityContainer unityContainer)`**
|
||||
Constructor. Injects the Unity container used for type registration.
|
||||
- **`public void Initialize()`**
|
||||
Registers three interfaces to their concrete implementations as singletons in the Unity container:
|
||||
- `IGroupChannelListViewModel` → `GroupChannelListViewModel`
|
||||
- `IGroupChannelListView` → `GroupChannelListView`
|
||||
- `IGroupChannelSettingsListView` → `GroupChannelSettingsListView`
|
||||
This method is called both directly by the constructor’s usage context (via `RegisterTypes`) and explicitly during Prism module initialization.
|
||||
- **`public void OnInitialized(IContainerProvider containerProvider)`**
|
||||
Currently empty; no logic implemented.
|
||||
- **`public void RegisterTypes(IContainerRegistry containerRegistry)`**
|
||||
Delegates to `Initialize()` (note: despite using `IContainerRegistry`, it internally uses `_unityContainer`, implying a potential mismatch or legacy pattern).
|
||||
|
||||
#### `GroupChannelListModuleNameAttribute`
|
||||
- **`public GroupChannelListModuleNameAttribute()` / `GroupChannelListModuleNameAttribute(string s)`**
|
||||
Constructor; ignores the `string s` parameter. Sets `AssemblyName` to `AssemblyNames.GroupChannelList.ToString()`.
|
||||
- **`public override string AssemblyName { get; }`**
|
||||
Returns `"GroupChannelList"` (value of `AssemblyNames.GroupChannelList.ToString()`).
|
||||
- **`public override Type GetAttributeType()`**
|
||||
Returns `typeof(TextAttribute)`.
|
||||
- **`public override string GetAssemblyName()`**
|
||||
Returns the value of `AssemblyName`.
|
||||
|
||||
#### `GroupChannelListModuleImageAttribute`
|
||||
- **`public GroupChannelListModuleImageAttribute()` / `GroupChannelListModuleImageAttribute(string s)`**
|
||||
Constructor; initializes `_img` by calling `AssemblyInfo.GetImage("GroupChannelList")`.
|
||||
- **`public override BitmapImage AssemblyImage { get; }`**
|
||||
Returns the image retrieved via `AssemblyInfo.GetImage("GroupChannelList")`.
|
||||
- **`public override BitmapImage GetAssemblyImage()`**
|
||||
Returns `AssemblyImage`.
|
||||
- **`public override string AssemblyName { get; }`**
|
||||
Returns `"GroupChannelList"`.
|
||||
- **`public override string GetAssemblyName()`**
|
||||
Returns `AssemblyName`.
|
||||
- **`public override string AssemblyGroup { get; }`**
|
||||
Returns `"Prepare"` (value of `eAssemblyGroups.Prepare.ToString()`).
|
||||
- **`public override string GetAssemblyGroup()`**
|
||||
Returns `AssemblyGroup`.
|
||||
- **`public override eAssemblyRegion AssemblyRegion { get; }`**
|
||||
Returns `eAssemblyRegion.GroupChannelListRegion`.
|
||||
- **`public override eAssemblyRegion GetAssemblyRegion()`**
|
||||
Returns `AssemblyRegion`.
|
||||
- **`public override Type GetAttributeType()`**
|
||||
Returns `typeof(ImageAttribute)`.
|
||||
|
||||
---
|
||||
|
||||
### 3. Invariants
|
||||
- The module **must** be loaded in a Prism-based application using Unity as the DI container (as it directly uses `IUnityContainer` and `Unity` namespace).
|
||||
- `Initialize()` must be called exactly once during module initialization to register the three types as singletons.
|
||||
- `AssemblyNames.GroupChannelList`, `eAssemblyGroups.Prepare`, and `eAssemblyRegion.GroupChannelListRegion` must be defined elsewhere (in `DTS.Common` or `DTS.Common.Interface`) and must have consistent string/enum values; otherwise, runtime errors may occur (e.g., `AssemblyInfo.GetImage()` failure, region resolution failure).
|
||||
- The `AssemblyImage` property assumes `AssemblyInfo.GetImage("GroupChannelList")` returns a valid `BitmapImage`; if not, null or exception may result (no null-check observed).
|
||||
- The `RegisterTypes` method uses `IContainerRegistry`, but internally calls `Initialize()`, which uses `_unityContainer` (a `IUnityContainer`). This implies either:
|
||||
- `IContainerRegistry` wraps `IUnityContainer` (e.g., via Prism.Unity integration), or
|
||||
- A design inconsistency (see *Gotchas*).
|
||||
|
||||
---
|
||||
|
||||
### 4. Dependencies
|
||||
|
||||
#### Dependencies *of* this module:
|
||||
- `DTS.Common` (specifically `AssemblyNames.GroupChannelList`, `eAssemblyGroups`, `eAssemblyRegion`, and `AssemblyInfo.GetImage(...)`)
|
||||
- `DTS.Common.Interface.Groups.GroupChannelList` (for `IGroupChannelListViewModel`, `IGroupChannelListView`, `IGroupChannelSettingsListView`)
|
||||
- `Prism.Modularity` (`IModule`, `ModuleAttribute`)
|
||||
- `Prism.Ioc` (`IContainerProvider`, `IContainerRegistry`)
|
||||
- `Unity` (`IUnityContainer`)
|
||||
- `System.Windows.Media.Imaging` (`BitmapImage`)
|
||||
|
||||
#### Dependencies *on* this module:
|
||||
- The host application (or other modules) must resolve `IGroupChannelListViewModel`, `IGroupChannelListView`, and `IGroupChannelSettingsListView` via DI after module initialization.
|
||||
- UI regions (e.g., `GroupChannelListRegion`) must be defined elsewhere (e.g., in a shell or region manager) for views to be injected.
|
||||
- The module’s metadata attributes (`GroupChannelListModuleNameAttribute`, `GroupChannelListModuleImageAttribute`) are used by the host application’s module discovery/UI logic (e.g., to populate a summary screen), implying external consumers rely on the attribute metadata structure.
|
||||
|
||||
---
|
||||
|
||||
### 5. Gotchas
|
||||
- **`RegisterTypes` vs `Initialize` mismatch**: `RegisterTypes` accepts `IContainerRegistry` (Prism’s abstraction), but `Initialize()` uses `_unityContainer` (`IUnityContainer`). If `IContainerRegistry` does not expose the underlying Unity container (or if `Initialize()` is called before `_unityContainer` is set), this could lead to incorrect registration or null reference. *This suggests potential tech debt or reliance on Prism.Unity’s internal bridging.*
|
||||
- **No null safety in `AssemblyImage`**: `AssemblyInfo.GetImage(...)` may return `null` if the image resource is missing or misnamed, but no defensive handling is present.
|
||||
- **Unused constructor parameters**: The `string s` parameter in both attribute constructors is ignored, which may confuse developers expecting configurability.
|
||||
- **Hardcoded string `"GroupChannelList"`**: Used in multiple places (`AssemblyNames.GroupChannelList.ToString()`, `AssemblyInfo.GetImage(...)`, `AssemblyGroup`). A typo or rename in `AssemblyNames.GroupChannelList` or `AssemblyInfo` would cause silent failures.
|
||||
- **`OnInitialized` is empty**: Suggests incomplete implementation or future extensibility point.
|
||||
- **No validation of view/view-model registration**: Assumes `IGroupChannelListViewModel`, etc., are implemented by `GroupChannelListViewModel`, etc., with compatible lifetimes (singletons). Misconfiguration here could cause runtime issues.
|
||||
- **No documentation on `IGroupChannelListViewModel`/`IGroupChannelListView` interfaces**: Their contract (methods, events, properties) is not visible in this file.
|
||||
|
||||
None identified beyond the above.
|
||||
Reference in New Issue
Block a user