Black.Beard.ComponentModel 1.0.4

There is a newer version of this package available.
See the version list below for details.
dotnet add package Black.Beard.ComponentModel --version 1.0.4                
NuGet\Install-Package Black.Beard.ComponentModel -Version 1.0.4                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Black.Beard.ComponentModel" Version="1.0.4" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Black.Beard.ComponentModel --version 1.0.4                
#r "nuget: Black.Beard.ComponentModel, 1.0.4"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Black.Beard.ComponentModel as a Cake Addin
#addin nuget:?package=Black.Beard.ComponentModel&version=1.0.4

// Install Black.Beard.ComponentModel as a Cake Tool
#tool nuget:?package=Black.Beard.ComponentModel&version=1.0.4                

Black.Beard.ComponentModel

Build status

Method helper for resolve types and methods.

How to use

You can use in non-intrusive mode. use the type descriptor.

Register the new TypeDescriptorProvider

GenericTypeDescriptionProvider.Register<ExampleType>();

Create a new instance for the specified type

var instance = (ExampleType)TypeDescriptor.CreateInstance(null, typeof(ExampleType), null, null);
var p = TypeDescriptor.GetProperties(i);
var property = p[nameof(ExampleType.Message)];
property.GetValue(i).Should().Be("3");

Add a virtual property

The part based on PropertyTypeDescriptor is insparated from MatthewKing / DynamicDescriptors

var instanceToBind = new ExampleClass();

var descriptor = DynamicDescriptor.CreateFromInstance(instanceToBind);

descriptor.GetDynamicProperty("PropertyOne") // Get the property using its name.
    .SetDisplayName("Property #1")
    .SetDescription("The first property")
    .SetCategory("Example category");

descriptor.GetDynamicProperty((ExampleClass x) => x.Property2) // Get the property using an expression.
    .SetDisplayName("Property #2")
    .SetDescription("The second property")
    .SetCategory("Example category");

propertyGrid.SelectedObject = descriptor;

Binding to an object instance

We can create a DynamicDescriptor for an object instance:

var instance = new ExampleClass();

var descriptor = DynamicDescriptor.CreateFromInstance(instance);

Binding to a dictionary

We can create a DynamicDescriptor backed by a dictionary. This will act as if the dictionary key/value pairs are properties of a bound object:

var data = new Dictionary<string, object>();
data["Property1"] = "hello";
data["Property2"] = "world";

var descriptor = DynamicDescriptor.CreateFromDictionary(data);

We can also supply type information:

var data = new Dictionary<string, object>();
data["Property1"] = "value";
data["Property2"] = 1;

var types = new Dictionary<string, Type>();
types["Property1"] = typeof(string);
types["Property2"] = typeof(int);

var descriptor = DynamicDescriptor.CreateFromDictionary(data, types);

What can be customized?

DisplayName:

descriptor.GetDynamicProperty("PropertyName").SetDisplayName("Property display name");

This modifies the value returned by the DisplayName property.

Description:

descriptor.GetDynamicProperty("PropertyName").SetDescription("A description of the property");

This modifies the value returned by the Description property.

Category:

descriptor.GetDynamicProperty("PropertyName").SetCategory("Category name");

This modifies the value returned by the Category property.

Converter:

TypeConverter converter = /* your custom type converter */;
descriptor.GetDynamicProperty("PropertyName").SetConverter(converter);

This modifies the value returned by the Converter property.

IsReadOnly:

descriptor.GetDynamicProperty("PropertyName").SetReadOnly(true);

This modifies the value returned by the IsReadOnly property.

Property order:

descriptor.GetDynamicProperty("PropertyOne").SetPropertyOrder(1);
descriptor.GetDynamicProperty("PropertyTwo").SetPropertyOrder(2);
descriptor.GetDynamicProperty("PropertyThree").SetPropertyOrder(3);

This modifies the order in which properties are returned by the GetProperties method.

Installation

Just grab it from NuGet

PM> Install-Package DynamicDescriptors

Copyright Matthew King 2012-2020. Distributed under the MIT License. Refer to license.txt for more information.

Product Compatible and additional computed target framework versions.
.NET net6.0 is compatible.  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 was computed.  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 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (3)

Showing the top 3 NuGet packages that depend on Black.Beard.ComponentModel:

Package Downloads
Black.Beard.Jslt

Implementation of jslt language in DOTNET. Use a template for transform Json document to another json document.

Black.Beard.Roslyn

Helper for compile Csharp at runtime

Black.Beard.Web.Server

Provide a service base for just concentrate your services

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.0.136 22 1/7/2025
1.0.135 80 12/22/2024
1.0.134 68 12/22/2024
1.0.133 75 12/22/2024
1.0.132 76 12/22/2024
1.0.131 94 12/21/2024
1.0.130 76 12/21/2024
1.0.129 86 12/20/2024
1.0.128 82 12/20/2024
1.0.127 75 12/20/2024
1.0.124 142 12/7/2024
1.0.123 220 11/17/2024
1.0.122 94 11/17/2024
1.0.121 101 11/17/2024
1.0.120 99 11/17/2024
1.0.119 104 11/17/2024
1.0.118 100 11/17/2024
1.0.117 402 10/28/2024
1.0.116 192 10/18/2024
1.0.115 89 10/16/2024
1.0.114 121 9/10/2024
1.0.113 109 9/10/2024
1.0.112 107 9/10/2024
1.0.111 102 9/10/2024
1.0.110 112 9/3/2024
1.0.109 117 8/28/2024
1.0.108 110 8/27/2024
1.0.107 130 8/13/2024
1.0.106 117 7/17/2024
1.0.105 99 7/6/2024
1.0.104 98 7/6/2024
1.0.103 109 7/6/2024
1.0.102 95 7/5/2024
1.0.101 109 7/5/2024
1.0.100 114 7/3/2024
1.0.99 102 7/3/2024
1.0.98 103 7/3/2024
1.0.97 88 7/3/2024
1.0.96 117 7/2/2024
1.0.95 143 5/5/2024
1.0.94 147 5/4/2024
1.0.93 90 5/3/2024
1.0.92 107 5/3/2024
1.0.91 276 5/2/2024
1.0.90 111 5/1/2024
1.0.89 143 4/24/2024
1.0.88 138 4/24/2024
1.0.87 124 4/24/2024
1.0.86 161 4/22/2024
1.0.85 139 4/22/2024
1.0.84 121 4/21/2024
1.0.83 109 4/21/2024
1.0.82 122 4/21/2024
1.0.81 121 4/21/2024
1.0.80 119 4/21/2024
1.0.79 120 4/18/2024
1.0.78 114 4/18/2024
1.0.77 124 4/18/2024
1.0.76 124 4/18/2024
1.0.75 126 4/15/2024
1.0.74 154 4/14/2024
1.0.73 129 4/14/2024
1.0.72 119 4/14/2024
1.0.71 125 4/14/2024
1.0.70 153 4/13/2024
1.0.69 124 4/13/2024
1.0.68 130 4/13/2024
1.0.67 125 4/13/2024
1.0.66 122 4/13/2024
1.0.65 126 4/13/2024
1.0.64 126 4/12/2024
1.0.63 125 4/12/2024
1.0.62 119 4/11/2024
1.0.61 122 4/10/2024
1.0.60 132 4/8/2024
1.0.58 253 4/6/2024
1.0.57 1,339 3/9/2024
1.0.56 131 3/5/2024
1.0.55 151 3/5/2024
1.0.54 151 3/4/2024
1.0.53 194 3/4/2024
1.0.52 355 3/3/2024
1.0.51 134 3/3/2024
1.0.50 125 3/3/2024
1.0.49 121 3/2/2024
1.0.48 884 2/4/2024
1.0.47 121 1/27/2024
1.0.46 177 1/6/2024
1.0.45 143 1/6/2024
1.0.44 157 1/6/2024
1.0.41 1,744 6/17/2023
1.0.40 287 6/17/2023
1.0.37 6,484 3/19/2022
1.0.36 4,271 3/15/2022
1.0.35 475 3/6/2022
1.0.34 457 2/11/2022
1.0.33 440 2/11/2022
1.0.32 440 2/11/2022
1.0.30 448 2/11/2022
1.0.29 480 2/9/2022
1.0.28 441 2/8/2022
1.0.27 442 2/8/2022
1.0.26 445 2/8/2022
1.0.25 449 2/6/2022
1.0.24 512 2/4/2022
1.0.23 490 2/2/2022
1.0.22 463 2/1/2022
1.0.21 456 1/27/2022
1.0.20 468 1/27/2022
1.0.19 468 1/26/2022
1.0.18 471 1/26/2022
1.0.17 466 1/20/2022
1.0.16 454 1/15/2022
1.0.15 470 1/15/2022
1.0.14 462 1/12/2022
1.0.13 322 1/12/2022
1.0.12 470 1/12/2022
1.0.9 307 1/9/2022
1.0.8 313 1/9/2022
1.0.7 281 1/9/2022
1.0.6 300 1/8/2022
1.0.5 11,640 12/19/2021
1.0.4 326 12/19/2021
1.0.3 345 12/19/2021