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. 
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.114 91 9/10/2024
1.0.113 82 9/10/2024
1.0.112 81 9/10/2024
1.0.111 78 9/10/2024
1.0.110 89 9/3/2024
1.0.109 101 8/28/2024
1.0.108 96 8/27/2024
1.0.107 112 8/13/2024
1.0.106 100 7/17/2024
1.0.105 84 7/6/2024
1.0.104 81 7/6/2024
1.0.103 91 7/6/2024
1.0.102 82 7/5/2024
1.0.101 94 7/5/2024
1.0.100 100 7/3/2024
1.0.99 87 7/3/2024
1.0.98 88 7/3/2024
1.0.97 73 7/3/2024
1.0.96 102 7/2/2024
1.0.95 130 5/5/2024
1.0.94 132 5/4/2024
1.0.93 75 5/3/2024
1.0.92 92 5/3/2024
1.0.91 227 5/2/2024
1.0.90 93 5/1/2024
1.0.89 129 4/24/2024
1.0.88 119 4/24/2024
1.0.87 110 4/24/2024
1.0.86 145 4/22/2024
1.0.85 121 4/22/2024
1.0.84 107 4/21/2024
1.0.83 94 4/21/2024
1.0.82 110 4/21/2024
1.0.81 107 4/21/2024
1.0.80 105 4/21/2024
1.0.79 104 4/18/2024
1.0.78 100 4/18/2024
1.0.77 112 4/18/2024
1.0.76 102 4/18/2024
1.0.75 112 4/15/2024
1.0.74 142 4/14/2024
1.0.73 117 4/14/2024
1.0.72 109 4/14/2024
1.0.71 115 4/14/2024
1.0.70 141 4/13/2024
1.0.69 114 4/13/2024
1.0.68 114 4/13/2024
1.0.67 115 4/13/2024
1.0.66 110 4/13/2024
1.0.65 112 4/13/2024
1.0.64 116 4/12/2024
1.0.63 107 4/12/2024
1.0.62 109 4/11/2024
1.0.61 104 4/10/2024
1.0.60 122 4/8/2024
1.0.58 239 4/6/2024
1.0.57 1,325 3/9/2024
1.0.56 121 3/5/2024
1.0.55 139 3/5/2024
1.0.54 135 3/4/2024
1.0.53 182 3/4/2024
1.0.52 343 3/3/2024
1.0.51 122 3/3/2024
1.0.50 115 3/3/2024
1.0.49 109 3/2/2024
1.0.48 872 2/4/2024
1.0.47 111 1/27/2024
1.0.46 167 1/6/2024
1.0.45 133 1/6/2024
1.0.44 145 1/6/2024
1.0.41 1,730 6/17/2023
1.0.40 275 6/17/2023
1.0.37 6,469 3/19/2022
1.0.36 4,258 3/15/2022
1.0.35 462 3/6/2022
1.0.34 444 2/11/2022
1.0.33 427 2/11/2022
1.0.32 427 2/11/2022
1.0.30 435 2/11/2022
1.0.29 465 2/9/2022
1.0.28 428 2/8/2022
1.0.27 427 2/8/2022
1.0.26 430 2/8/2022
1.0.25 436 2/6/2022
1.0.24 499 2/4/2022
1.0.23 473 2/2/2022
1.0.22 445 2/1/2022
1.0.21 443 1/27/2022
1.0.20 455 1/27/2022
1.0.19 453 1/26/2022
1.0.18 458 1/26/2022
1.0.17 453 1/20/2022
1.0.16 441 1/15/2022
1.0.15 455 1/15/2022
1.0.14 449 1/12/2022
1.0.13 309 1/12/2022
1.0.12 455 1/12/2022
1.0.9 292 1/9/2022
1.0.8 298 1/9/2022
1.0.7 268 1/9/2022
1.0.6 285 1/8/2022
1.0.5 11,457 12/19/2021
1.0.4 313 12/19/2021
1.0.3 330 12/19/2021