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

4.9 KiB
Raw Permalink Blame History

source_files, generated_at, model, schema_version, sha256
source_files generated_at model schema_version sha256
Common/DTS.Common/obj/x86/Debug/GeneratedInternalTypeHelper.g.cs
Common/DTS.Common/obj/x86/Debug/GeneratedInternalTypeHelper.g.i.cs
2026-04-16T02:56:51.283838+00:00 Qwen/Qwen3-Coder-Next-FP8 1 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.