Skip to content

BindOpen Kernel enables the development of highly extensible .NET applications.

License

Notifications You must be signed in to change notification settings

bindopen/BindOpen.Kernel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

BindOpen.Kernel

BindOpen logo

Github release version

BindOpen is a framework that enables the development of highly extensible applications. It allows you to enhance your .NET projects with custom script functions, connectors, entities, and tasks.

About

BindOpen.Kernel is the kernel of the BindOpen framework. It is composed of the following modules:

  • Kernel.Data offers a comprehensive data model based on metadata.
  • Kernel.Scoping offers an effective mechanism for defining and managing your extensions.
  • Kernel.Hosting allows you to integrate a BindOpen agent within the .NET service builder.
  • Kernel.Logging provides a straightforward and multi-dimensional logging system.
  • Kernel.IO provides packages to serialize and deserialize BindOpen.Kernel objects.

This repository contains the Kernel.Data, Kernel.Scoping and Kernel.IO modules. The two other ones are separate repositories.

A full list of all the BindOpen repos is available as well.

Install

To get started, install the BindOpen.Kernel module you want to use.

Note: We recommend that later on, you install only the package you need.

From Visual Studio

Module Instruction
BindOpen.Data PM> Install-Package BindOpen.Data
BindOpen.Scoping PM> Install-Package BindOpen.Scoping
BindOpen.IO PM> Install-Package BindOpen.IO

From .NET CLI

Module Instruction
BindOpen.Data > dotnet add package BindOpen.Data
BindOpen.Scoping > dotnet add package BindOpen.Scoping
BindOpen.IO > dotnet add package BindOpen.IO

Get started

Kernel.Data

Metadata

var meta = BdoData.NewMeta("host", DataValueTypes.Text, "my-test-host");

Configuration

var config = BdoData.NewConfig(
        "test-config",
        BdoData.NewScalar("comment", DataValueTypes.Text, "Sunny day"),
        BdoData.NewScalar("temperature", DataValueTypes.Integer, 25, 26, 26),
        BdoData.NewScalar("date", DataValueTypes.Date, DateTime.Now),
        BdoData.NewNode(
            "subscriber"
            BdoData.NewScalar("name", DataValueTypes.Text, "Ernest E."),
            BdoData.NewScalar("code", DataValueTypes.Integer, 1560))
    )
    .WithTitle("Example of configuration")
    .WithDescription(("en", "This is an example of description"))

Kernel.Scoping

var scope = BdoScoping.NewScope()
    .LoadExtensions(q => q.AddAllAssemblies());

Script

[BdoFunction(
    Name = "testFunction",
    Description = "Returns true if second string parameter is the first one ending with underscore")]
public static object Fun_Func2a(
    this string st1,
    string st2)
{
    return st1 == st2 + "_";
}

...

var exp = "$testFunction('MYTABLE', $text('MYTABLE_'))";
var result = scope.Interpreter.Evaluate<bool?>(exp);
// result is True

Tasks

[BdoTask("taskFake")]
public class TaskFake : BdoTask
{
    [BdoProperty(Name = "boolValue")]
    public bool BoolValue { get; set; }

    [BdoOutput(Name = "stringValue")]
    public string StringValue { get; set; }

    [BdoInput(Name = "enumValue")]
    public ActionPriorities EnumValue { get; set; }

    ...

    public override Task<bool> ExecuteAsync(
        CancellationToken token,
        IBdoScope scope = null,
        IBdoMetaSet varSet = null,
        RuntimeModes runtimeMode = RuntimeModes.Normal,
        IBdoLog log = null)
    {
        ...

        Debug.WriteLine("Task completed");

        return Task.FromResult(true);
    }
}

...

var meta = BdoData.NewObject()
    .WithDataType(BdoExtensionKinds.Task, "bindopen.tests$taskFake")
    .WithProperties(("boolValue", false))
    .WithInputs(BdoData.NewScalar("enumValue", ActionPriorities.Low))
    .WithOutputs(("stringValue", "test-out"));
                    
var task = scope.CreateTask<TaskFake>(meta);
var cancelToken = new CancellationTokenSource();
task.Execute(cancelToken.Token, scope);

Kernel.IO

Serialization

var metaSet = BdoData.NewSet("test-io").With(("host", "host-test"), ("address", "0.0.0.0"));
metaSet.ToDto().SaveXml("output.xml");

Deserialization

var metaSet = JsonHelper.LoadJson<MetaSetDto>("output.xml").ToPoco();

License

This project is licensed under the terms of the MIT license. See LICENSE.

Packages

This repository contains the code of the following Nuget packages:

Package Provision
BindOpen.Abstractions Interfaces and enumerations
BindOpen.Data Core data model
BindOpen.Scoping Extension manager
BindOpen.Scoping.Extensions Classes of extensions
BindOpen.Scoping.Script Script interpreter
BindOpen.IO Serialization / Deserialization
BindOpen.IO.Dtos Data transfer classes

The atomicity of these packages allows you install only what you need respecting your solution's architecture.

All of our NuGet packages are available from our NuGet.org profile page.

Other repos and Projects

BindOpen.Hosting enables you to integrate a BindOpen agent within the .NET service builder.

BindOpen.Logging provides a simple and multidimensional logging system, perfect to monitor nested task executions.

BindOpen.Labs is a collection of projects based on BindOpen.

A full list of all the repos is available as well.

Documentation and Further Learning

The BindOpen Docs are the ideal place to start if you are new to BindOpen. They are categorized in 3 broader topics:

  • Articles to learn how to use BindOpen;
  • Notes to follow our releases;
  • Api to have an overview of BindOpen APIs.

The BindOpen Blog is where we announce new features, write engineering blog posts, demonstrate proof-of-concepts and features under development.

Feedback

If you're having trouble with BindOpen, file a bug on the BindOpen Issue Tracker.

Donation

You are welcome to support this project. All donations are optional but are greatly appreciated.

Please donate

About

BindOpen Kernel enables the development of highly extensible .NET applications.

Resources

License

Stars

Watchers

Forks

Packages

No packages published