System.Reflection.Context
                              
                            
                                9.0.10
                            
                        
                            
                                
                                
                                    Prefix Reserved
                                
                            
                    See the version list below for details.
dotnet add package System.Reflection.Context --version 9.0.10
NuGet\Install-Package System.Reflection.Context -Version 9.0.10
<PackageReference Include="System.Reflection.Context" Version="9.0.10" />
<PackageVersion Include="System.Reflection.Context" Version="9.0.10" />
<PackageReference Include="System.Reflection.Context" />
paket add System.Reflection.Context --version 9.0.10
#r "nuget: System.Reflection.Context, 9.0.10"
#:package System.Reflection.Context@9.0.10
#addin nuget:?package=System.Reflection.Context&version=9.0.10
#tool nuget:?package=System.Reflection.Context&version=9.0.10
About
Provides the CustomReflectionContext class to enable adding or removing custom attributes from reflection objects, or adding dummy properties to those objects, without re-implementing the complete reflection model.
Key Features
- Create a custom reflection context to control how types and members are presented during reflection.
- Easily extend or customize the reflection model to fit specialized application needs.
How to Use
Defining a custom Attribute and implement a CustomReflectionContext to add the attribute to specic methods.
using System.Reflection;
using System.Reflection.Context;
[AttributeUsage(AttributeTargets.Method)]
class CustomAttribute : Attribute
{
}
class CustomContext : CustomReflectionContext
{
    // Called whenever the reflection context checks for custom attributes.
    protected override IEnumerable<object> GetCustomAttributes(MemberInfo member, IEnumerable<object> declaredAttributes)
    {
        // Add custom attribute to "ToString" members
        if (member.Name == "ToString")
        {
            yield return new CustomAttribute();
        }
        // Keep existing attributes as well
        foreach (var attr in declaredAttributes)
        {
            yield return attr;
        }
    }
}
Inspecting the string type with both the default and custom reflection context.
Type type = typeof(string);
// Representation of the type in the default reflection context
TypeInfo typeInfo = type.GetTypeInfo();
Console.WriteLine("\"To*\" members and their attributes in the default reflection context");
foreach (MemberInfo memberInfo in typeInfo.DeclaredMembers)
{
    if (memberInfo.Name.StartsWith("To"))
    {
        Console.WriteLine(memberInfo.Name);
        foreach (Attribute attribute in memberInfo.GetCustomAttributes())
        {
            Console.WriteLine($" - {attribute.GetType()}");
        }
    }
}
Console.WriteLine();
// Output:
// "To*" members and their attributes in the default reflection context
// ToCharArray
// ToCharArray
// ToString
// ToString
// ToLower
// ToLower
// ToLowerInvariant
// ToUpper
// ToUpper
// ToUpperInvariant
// Representation of the type in the customized reflection context
CustomContext customContext = new();
TypeInfo customTypeInfo = customContext.MapType(typeInfo);
Console.WriteLine("\"To*\" members and their attributes in the customized reflection context");
foreach (MemberInfo memberInfo in customTypeInfo.DeclaredMembers)
{
    if (memberInfo.Name.StartsWith("To"))
    {
        Console.WriteLine(memberInfo.Name);
        foreach (Attribute attribute in memberInfo.GetCustomAttributes())
        {
            Console.WriteLine($" - {attribute.GetType()}");
        }
    }
}
// Output:
// "To*" members and their attributes in the customized reflection context
// ToCharArray
// ToCharArray
// ToString
//  - CustomAttribute
// ToString
//  - CustomAttribute
// ToLower
// ToLower
// ToLowerInvariant
// ToUpper
// ToUpper
// ToUpperInvariant
Main Types
The main type provided by this library is:
- System.Reflection.Context.CustomReflectionContext
Additional Documentation
Feedback & Contributing
System.Reflection.Context is released as open source under the MIT license. Bug reports and contributions are welcome at the GitHub repository.
| Product | Versions Compatible and additional computed target framework versions. | 
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. | 
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. | 
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 is compatible. | 
| .NET Framework | net461 was computed. net462 is compatible. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. | 
| MonoAndroid | monoandroid was computed. | 
| MonoMac | monomac was computed. | 
| MonoTouch | monotouch was computed. | 
| Tizen | tizen40 was computed. tizen60 was computed. | 
| Xamarin.iOS | xamarinios was computed. | 
| Xamarin.Mac | xamarinmac was computed. | 
| Xamarin.TVOS | xamarintvos was computed. | 
| Xamarin.WatchOS | xamarinwatchos was computed. | 
- 
                                                    .NETStandard 2.0- No dependencies.
 
- 
                                                    .NETStandard 2.1- No dependencies.
 
- 
                                                    net8.0- No dependencies.
 
- 
                                                    net9.0- No dependencies.
 
NuGet packages (13)
Showing the top 5 NuGet packages that depend on System.Reflection.Context:
| Package | Downloads | 
|---|---|
| Microsoft.Windows.Compatibility This Windows Compatibility Pack provides access to APIs that were previously available only for .NET Framework. It can be used from both .NET as well as .NET Standard. | |
| System.ComponentModel.Composition.Registration This namespace provides classes that constitute the core of the Managed Extensibility Framework, or MEF. Commonly Used Types: System.ComponentModel.Composition.Registration.RegistrationBuilder System.ComponentModel.Composition.Registration.PartBuilder System.ComponentModel.Composition.Registration.PartBuilder<T> System.ComponentModel.Composition.Registration.ParameterImportBuilder System.ComponentModel.Composition.Registration.ImportBuilder System.ComponentModel.Composition.Registration.ExportBuilder | |
| Microsoft.NETCore.UniversalWindowsPlatform Provides a set of packages that can be used when building Universal Windows applications on .NETCore. d67bd83a075b8b10cb95810568073c1a3211f28b When using NuGet 3.x this package requires at least version 3.4. | |
| More The core library for the "More" framework. | |
| Gorgon.Core Contains common core functionality used by the various Gorgon libraries. | 
GitHub repositories (2)
Showing the top 2 popular GitHub repositories that depend on System.Reflection.Context:
| Repository | Stars | 
|---|---|
| dotnet/dotnet 
                                                            Home of .NET's Virtual Monolithic Repository which includes all the code needed to build the .NET SDK.
                                                         | |
| Tape-Worm/Gorgon 
                                                            A modular set of libraries for .Net that are useful for graphics and video game development.
                                                         |