init
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
---
|
||||
source_files:
|
||||
- DTS Viewer/DTS.Viewer.Modules/DTS.Viewer.Navigation/NavigationModule.cs
|
||||
generated_at: "2026-04-16T11:07:35.667287+00:00"
|
||||
model: "zai-org/GLM-5-FP8"
|
||||
schema_version: 1
|
||||
sha256: "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.
|
||||
Reference in New Issue
Block a user