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

6.1 KiB

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
DTS Viewer/DTS.Viewer.Modules/DTS.Viewer.Navigation/NavigationModule.cs
2026-04-16T11:07:35.667287+00:00 zai-org/GLM-5-FP8 1 b8a48119ee42a5bd

Documentation: DTS.Viewer.Navigation

1. Purpose

This module serves as the entry point for the Navigation component within the DTS Viewer application. It is a Prism Module (NavigationModule) responsible for registering the Navigation view and view model with the Unity dependency injection container. Additionally, it defines assembly-level attributes (NavigationPropertiesNameAttribute, NavigationPropertiesImageAttribute) that expose metadata—such as the assembly name, icon, and region assignment—to the broader application, likely for dynamic UI generation or module listing in the main shell.

2. Public Interface

NavigationModule

The main Prism module class responsible for DI registration.

  • NavigationModule(IUnityContainer unityContainer)
    • Constructor that accepts an IUnityContainer instance via dependency injection and stores it in a private readonly field.
  • void RegisterTypes(IContainerRegistry containerRegistry)
    • Implements IModule.RegisterTypes. Calls the private Initialize() method to perform type registration.
  • void OnInitialized(IContainerProvider containerProvider)
    • Implements IModule.OnInitialized. Currently contains an empty implementation block.

NavigationPropertiesNameAttribute

An assembly-level attribute extending TextAttribute used to expose the assembly name.

  • NavigationPropertiesNameAttribute()
    • Default constructor. Initializes the internal assembly name string.
  • NavigationPropertiesNameAttribute(string s)
    • Overloaded constructor accepting a string s (which appears to be ignored in the implementation).
  • override string AssemblyName
    • Property getter returning the string value of AssemblyNames.Navigation.
  • override Type GetAttributeType()
    • Returns typeof(TextAttribute).
  • override string GetAssemblyName()
    • Returns the AssemblyName property value.

NavigationPropertiesImageAttribute

An assembly-level attribute extending ImageAttribute used to expose visual metadata (image, group, region).

  • NavigationPropertiesImageAttribute()
    • Default constructor. Initializes the assembly image.
  • NavigationPropertiesImageAttribute(string s)
    • Overloaded constructor accepting a string s (ignored in implementation).
  • override BitmapImage AssemblyImage
    • Property getter that retrieves a BitmapImage via AssemblyInfo.GetImage.
  • override string AssemblyName
    • Returns AssemblyNames.Navigation.ToString().
  • override string AssemblyGroup
    • Returns eAssemblyGroups.Viewer.ToString().
  • override eAssemblyRegion AssemblyRegion
    • Returns eAssemblyRegion.NavigationRegion.
  • override BitmapImage GetAssemblyImage()
    • Returns the AssemblyImage property.
  • override string GetAssemblyName()
    • Returns the AssemblyName property.
  • override eAssemblyRegion GetAssemblyRegion()
    • Returns the AssemblyRegion property.
  • override string GetAssemblyGroup()
    • Returns the AssemblyGroup property.

3. Invariants

  • Module Name: The NavigationModule is identified by the string "NavigationProperties" via the [Module] attribute.
  • Attribute Usage: Both custom attributes are decorated with [AttributeUsage(AttributeTargets.Assembly, AllowMultiple = false)], ensuring only one instance of each exists per assembly.
  • Type Registration: The INavigationView interface is always mapped to the NavigationView class, and INavigationViewModel is mapped to NavigationViewModel.
  • Metadata Constants: The AssemblyName is strictly derived from AssemblyNames.Navigation, the AssemblyGroup from eAssemblyGroups.Viewer, and the AssemblyRegion from eAssemblyRegion.NavigationRegion.

4. Dependencies

Internal Dependencies (referenced but not defined in source):

  • DTS.Common: Likely contains AssemblyNames, eAssemblyGroups, eAssemblyRegion, and AssemblyInfo.
  • DTS.Common.Interface: Defines TextAttribute, ImageAttribute, INavigationView, and INavigationViewModel.
  • DTS.Viewer.Navigation (local namespace): Contains NavigationView and NavigationViewModel classes (referenced but not shown in source).

External Frameworks:

  • Prism.Ioc, Prism.Modularity: For module definition and DI abstractions.
  • Unity: IUnityContainer for specific dependency injection implementation.
  • System.Windows.Media.Imaging: For BitmapImage.

5. Gotchas

  • Comment/Code Mismatch (Singleton vs. Transient): The comment in Initialize() states: "Register View & View-Model ... as a singleton." However, the code uses _unityContainer.RegisterType<...>(). In Unity, RegisterType registers a transient mapping (new instance per resolve) by default. To register as a singleton, ContainerControlledLifetimeManager should be used. The code does not match the intent described in the comment.
  • Ignored Constructor Parameters: Both attribute classes possess constructors taking a string s, but the parameter is never used inside the constructor body. The _assemblyName or _img fields are always populated using hardcoded AssemblyNames.Navigation lookups.
  • Side Effects in Property Getters: The AssemblyImage property getter in NavigationPropertiesImageAttribute has a side effect: it assigns the private field _img before returning it (_img = ...; return _img;). This is non-standard property behavior and could lead to unnecessary object creation if the property is accessed frequently.
  • Mixed Container Usage: The module uses IUnityContainer (passed via constructor) to register types inside Initialize, but the RegisterTypes method receives an IContainerRegistry. The code bridges this by ignoring the IContainerRegistry parameter and using the stored _unityContainer reference directly.