DynamicObj 3.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package DynamicObj --version 3.0.0                
NuGet\Install-Package DynamicObj -Version 3.0.0                
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="DynamicObj" Version="3.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add DynamicObj --version 3.0.0                
#r "nuget: DynamicObj, 3.0.0"                
#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 DynamicObj as a Cake Addin
#addin nuget:?package=DynamicObj&version=3.0.0

// Install DynamicObj as a Cake Tool
#tool nuget:?package=DynamicObj&version=3.0.0                

DynamicObj

F# library supporting Dynamic Objects including inheritance in functional style.

The library is compatible with Fable, allowing transpilation to javascript and python.

Usage example

Get started

#r "nuget: DynamicObj"
#r "nuget: Fable.Core" // Needed if working with Fable

open DynamicObj
open Fable.Core // Needed if working with Fable

[<AttachMembers>] // AttachMembers needed if working with Fable
type Person(id : int, name : string) =
    
    // Include this in your class
    inherit DynamicObj()

    let mutable name = name

    // Mutable property
    member this.Name
        with get() = name
        and set(value) = name <- value

    // Immutable property
    member this.ID 
        with get() = id

let p = Person(1337,"John")

Accessing static and dynamic properties


// Access Static Properties
p.GetValue("Name") // val it: obj = "John"
p.GetValue("ID")   // val it: obj = 1337


// Overwrite mutable static property
p.SetValue("Name","Jane") // val it: unit = ()
// Overwrite immutable static property
p.SetValue("ID",1234) // System.Exception: Cannot set value for static, immutable property "ID"
// Set dynamic property
p.SetValue("Address","FunStreet") // val it: unit = ()


// Access Properties
p.GetValue("Name")    // val it: obj = "Jane"
p.Name                // val it: string = "Jane"
p.GetValue("ID")      // val it: obj = 1337
p.ID                  // val it: int = 1337
p.GetValue("Address") // val it: obj = "FunStreet"

Practical helpers

DynObj.format p
|> printfn "%s"

Name: Jane
ID: 1337
?Address: FunStreet

Development

Requirements
  • nodejs and npm
    • verify with node --version (Tested with v18.16.1)
    • verify with npm --version (Tested with v9.2.0)
  • .NET SDK
    • verify with dotnet --version (Tested with 7.0.306)
  • Python
    • verify with py --version (Tested with 3.12.2, known to work only for >=3.11)
Local Setup

On windows you can use the setup.cmd to run the following steps automatically!

  1. Setup dotnet tools

    dotnet tool restore

  2. Install NPM dependencies

    npm install

  3. Setup python environment

    py -m venv .venv

  4. Install Poetry and dependencies

    1. .\.venv\Scripts\python.exe -m pip install -U pip setuptools
    2. .\.venv\Scripts\python.exe -m pip install poetry
    3. .\.venv\Scripts\python.exe -m poetry install --no-root

Verify correct setup with ./build.cmd runtests

Product 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 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. 
.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 was computed. 
.NET Framework net461 was computed.  net462 was computed.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages (11)

Showing the top 5 NuGet packages that depend on DynamicObj:

Package Downloads
Plotly.NET

plotly.js charts in .NET programming languages 📈🚀.

ARCtrl.CWL

ARC helper functions for Common workflow language.

Cyjs.NET

.NET interface for Cytoscape.js written in F#

Dash.NET

Dotnet interface for Dash - the most downloaded framework for building ML and data science web apps - written in F#. This package contains the core implementation of dash for .NET such as callbacks, html and core components.

ProteomIQon

ProteomIQon - computational proteomics

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
4.0.3 1,751 10/16/2024
4.0.2 79 10/15/2024
4.0.1 190 10/15/2024
4.0.0 635 9/26/2024
3.1.0 1,140 9/2/2024
3.0.0 385 8/23/2024
2.0.0 268,091 5/31/2022
1.0.1 37,536 1/13/2022
1.0.0 440 1/13/2022
0.2.1 697 10/13/2021
0.2.0 18,258 9/10/2021
0.1.0 392 8/18/2021
0.0.3 21,813 4/16/2021
0.0.2 345 4/16/2021
0.0.1 852 1/27/2021

- Make project fable-compatible
- Rework project structure by splitting into DynamicObj and DynamicObj.Immutable
- Add a bunch of tests
- Backwards incompatible because of renaming and removing some members