Files

60 lines
4.9 KiB
Markdown
Raw Permalink Normal View History

2026-04-17 14:55:32 -04:00
---
source_files:
- Common/DTS.Common/obj/x86/Debug/GeneratedInternalTypeHelper.g.cs
- Common/DTS.Common/obj/x86/Debug/GeneratedInternalTypeHelper.g.i.cs
generated_at: "2026-04-16T02:56:51.283838+00:00"
model: "Qwen/Qwen3-Coder-Next-FP8"
schema_version: 1
sha256: "708a410ec1ac79c2"
---
# Debug
## Documentation: `GeneratedInternalTypeHelper`
### 1. Purpose
This module provides a WPF-specific runtime helper class used internally during XAML parsing and object initialization. It extends `System.Windows.Markup.InternalTypeHelper` to customize how objects are instantiated, property values are read/written, and event handlers are attached—primarily to support WPFs XAML infrastructure (e.g., for `x:Class`, `x:Name`, or event wiring in compiled XAML). It is **not intended for direct use** by application code and is auto-generated by the `PresentationBuildTasks` MSBuild task during the build process.
### 2. Public Interface
The class is `sealed` and inherits from `InternalTypeHelper`. All members are `protected override` methods—**not public API**—but are included here for completeness.
- **`protected override object CreateInstance(Type type, CultureInfo culture)`**
Instantiates the given `type` using reflection, allowing both public and non-public constructors (via `BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.CreateInstance`). Returns the new instance.
- **`protected override object GetPropertyValue(PropertyInfo propertyInfo, object target, CultureInfo culture)`**
Reads the value of `propertyInfo` on `target` using default binding flags (`BindingFlags.Default`). Returns the property value.
- **`protected override void SetPropertyValue(PropertyInfo propertyInfo, object target, object value, CultureInfo culture)`**
Writes `value` to `propertyInfo` on `target` using default binding flags.
- **`protected override Delegate CreateDelegate(Type delegateType, object target, string handler)`**
Dynamically creates a delegate of `delegateType` bound to the instance method named `handler` on `target`. Uses reflection to invoke the *non-public* instance method `_CreateDelegate` on `target.GetType()`.
⚠️ **Note**: This relies on an internal implementation detail (`_CreateDelegate`) of the target objects type.
- **`protected override void AddEventHandler(EventInfo eventInfo, object target, Delegate handler)`**
Attaches `handler` to the event represented by `eventInfo` on `target` using `EventInfo.AddEventHandler`.
### 3. Invariants
- The class is `sealed` and inherits from `System.Windows.Markup.InternalTypeHelper`, meaning it is tightly coupled to WPFs XAML infrastructure.
- All methods use reflection with explicit `BindingFlags`; no method relies on dynamic invocation beyond what is visible in the source.
- The `CreateDelegate` method assumes the `target` objects type exposes a non-public instance method named `_CreateDelegate` accepting `(Type, string)`—this is an internal contract with WPFs runtime, not a documented public API.
- The class is marked with `[EditorBrowsable(EditorBrowsableState.Never)]`, indicating it should never appear in IntelliSense or designer tooling.
### 4. Dependencies
- **Depends on**:
- `System.Windows.Markup.InternalTypeHelper` (base class)
- `System.Activator`, `System.Reflection` (for reflection-based object creation/property/event handling)
- `System.Globalization.CultureInfo` (for culture-sensitive operations)
- `PresentationBuildTasks` (the MSBuild task that generates this file)
- **Used by**:
- WPFs XAML compiler/runtime (e.g., `BamlReader`, `XamlWriter`, or generated BAML code) during deserialization or event wiring.
- Likely referenced indirectly via `x:Class` or `x:Name` in XAML files compiled into the same assembly.
- *Not* referenced directly by application code.
### 5. Gotchas
- **Auto-generated file**: This file is regenerated on every build; manual edits will be lost.
- **Non-public contract**: The `_CreateDelegate` reflection call in `CreateDelegate` is fragile—it depends on an undocumented, internal method of the target type. If the target type changes or does not implement `_CreateDelegate`, this will throw a `MissingMethodException` at runtime.
- **No public surface area**: This class is strictly internal infrastructure. Developers should never instantiate or extend it.
- **Culture handling**: All methods accept a `CultureInfo` parameter but pass it directly to reflection APIs—behavior may vary across cultures (e.g., case sensitivity in property/event names is not affected, but custom type converters might be).
- **No error handling visible**: The source shows no explicit exception handling; failures (e.g., missing methods, inaccessible properties) will propagate as reflection exceptions.
- **None identified from source alone** for typical usage patterns—only the above technical caveats are evident.