Files
2026-04-17 14:55:32 -04:00

7.6 KiB
Raw Permalink Blame History

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
DataPRO/Modules/Groups/GroupChannelList/GroupChannelListModule.cs
2026-04-16T04:44:06.724645+00:00 Qwen/Qwen3-Coder-Next-FP8 1 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 applications 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:
    • IGroupChannelListViewModelGroupChannelListViewModel
    • IGroupChannelListViewGroupChannelListView
    • IGroupChannelSettingsListViewGroupChannelSettingsListView
      This method is called both directly by the constructors 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 modules metadata attributes (GroupChannelListModuleNameAttribute, GroupChannelListModuleImageAttribute) are used by the host applications 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 (Prisms 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.Unitys 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.