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

6.1 KiB
Raw Permalink Blame History

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
DataPRO/Modules/SystemSettings/ISOSettings/ISOSettingsModule.cs
2026-04-16T04:39:52.161658+00:00 Qwen/Qwen3-Coder-Next-FP8 1 d9b10982c2687d59

ISOSettings

Documentation: ISOSettingsModule

1. Purpose

The ISOSettingsModule is a Prism module responsible for bootstrapping and registering the ISO Settings feature within the applications modular UI architecture. It integrates with the Unity dependency injection container to register the view (ISOSettingsView) and view model (ISOSettingsViewModel) as singleton services, enabling their later resolution and use in the UI. Additionally, it exposes metadata about the module (e.g., display name, group, and icon) via the ISOSettingsImageAttribute assembly-level attribute, allowing the main shell to render the module on the main screen under the Administrative group.

2. Public Interface

ISOSettingsModule class

  • ISOSettingsModule(IUnityContainer unityContainer)
    Constructor. Accepts a Unity container via dependency injection and stores it for later use in type registration.
  • void Initialize()
    Registers two interfaces to their concrete implementations as singleton types in the Unity container:
    • IISOSettingsViewISOSettingsView
    • IISOSettingsViewModelISOSettingsViewModel
      This method is called both directly during module initialization and indirectly via RegisterTypes.
  • void OnInitialized(IContainerProvider containerProvider)
    Currently empty. No initialization logic is performed after module registration.
  • void RegisterTypes(IContainerRegistry containerRegistry)
    Delegates to Initialize() to perform type registration. Note: Although the method signature uses IContainerRegistry (Prisms abstraction), the implementation uses the injected IUnityContainer directly—this may indicate a mismatch or legacy pattern.

ISOSettingsImageAttribute class

  • ISOSettingsImageAttribute()
    Default constructor; delegates to the parameterized constructor with null.
  • ISOSettingsImageAttribute(string s)
    Constructor accepting a string argument (unused); initializes _img by calling AssemblyInfo.GetImage(AssemblyNames.IsoSettings.ToString()).
  • override BitmapImage AssemblyImage { get; }
    Returns the assemblys icon image, retrieved via AssemblyInfo.GetImage(AssemblyNames.IsoSettings.ToString()).
  • override string AssemblyName { get; }
    Returns "IsoSettings" (via AssemblyNames.IsoSettings.ToString()).
  • override string AssemblyGroup { get; }
    Returns "Administrative" (via eAssemblyGroups.Administrative.ToString()).
  • override eAssemblyRegion AssemblyRegion { get; }
    Throws NotImplementedException.
  • override eAssemblyRegion GetAssemblyRegion()
    Throws NotImplementedException.
  • override Type GetAttributeType()
    Returns typeof(ImageAttribute).
  • override BitmapImage GetAssemblyImage()
    Returns AssemblyImage.
  • override string GetAssemblyName()
    Returns AssemblyName.
  • override string GetAssemblyGroup()
    Returns AssemblyGroup.

Note

: Several members (AssemblyRegion, GetAssemblyRegion()) are unimplemented and throw exceptions at runtime if invoked.

3. Invariants

  • The ISOSettingsModule must be loaded before any consumer attempts to resolve IISOSettingsView or IISOSettingsViewModel, as registration occurs only during Initialize()/RegisterTypes().
  • AssemblyInfo.GetImage() and AssemblyNames.IsoSettings must be valid and return non-null values at runtime; otherwise, AssemblyImage will fail.
  • The AssemblyGroup is hardcoded to "Administrative" and cannot be changed without recompilation.
  • The ISOSettingsImageAttribute is intended for use as an assembly-level attribute (via [assembly: ISOSettingsImageAttribute]), but its implementation is incomplete—AssemblyRegion and related methods are non-functional.

4. Dependencies

  • Imports/Dependencies:

    • DTS.Common and DTS.Common.Interface (for AssemblyInfo, AssemblyNames, eAssemblyGroups, ImageAttribute, eAssemblyRegion)
    • Prism.Modularity (for IModule)
    • Prism.Ioc (for IContainerRegistry)
    • Unity (for IUnityContainer)
    • System.ComponentModel.Composition (for [Export])
    • System.Windows.Media.Imaging (for BitmapImage)
  • Depended upon by:

    • The Prism module catalog/loader (via [Export(typeof(IModule))] and [Module(ModuleName = "ISOSettings")])
    • The main shell/application UI (via the ISOSettingsImageAttribute assembly attribute, used to display module metadata on the main screen)

5. Gotchas

  • RegisterTypes uses IContainerRegistry but internally relies on IUnityContainer: The method signature suggests Prisms DI abstraction, but the implementation uses the injected Unity container directly. This may cause confusion or breakage if the module is used with a non-Unity container.
  • AssemblyRegion and GetAssemblyRegion() are unimplemented: Any attempt to access these will throw NotImplementedException. This may be intentional (unused code path) or technical debt.
  • Redundant Initialize() call in RegisterTypes: Since Initialize() is called directly in RegisterTypes, and Initialize() is also called during Prisms Initialize() lifecycle, there is potential for double-registration if RegisterTypes is invoked multiple times (though Unity registrations are idempotent for singleton mappings).
  • Unused constructor parameter in ISOSettingsImageAttribute(string s): The s parameter is ignored.
  • No validation on image retrieval: If AssemblyInfo.GetImage() returns null (e.g., missing image resource), AssemblyImage will silently return null, potentially causing UI rendering issues.
  • Hardcoded string values: "IsoSettings" and "Administrative" are derived from enumToString() calls; while safer than literals, they assume the underlying enums (AssemblyNames, eAssemblyGroups) are correctly defined and stable.