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.
BindOpen.Kernel is the core module of the BindOpen framework. It enables you to easily model your business context, including data and operations.
BindOpen.Kernel is composed of the following modules:
- Data offers a comprehensive data model based on metadata.
- Scoping offers an effective mechanism for loading and using your extensions.
- Hosting allows you to integrate a BindOpen agent within the .NET service builder.
- Logging provides a straightforward and multi-dimensional logging system.
- Dtos.Converters provides packages to serialize and deserialize BindOpen.Kernel objects.
This repository contains the Data, Scoping and Dtos.Converters modules. The two other ones are separate repositories.
A full list of all the BindOpen repos is available as well.
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.
Module | Instruction |
---|---|
BindOpen.Data | PM> Install-Package BindOpen.Data |
BindOpen.Scoping | PM> Install-Package BindOpen.Scoping |
BindOpen.Dtos.Converters | PM> Install-Package BindOpen.Dtos.Converters |
Module | Instruction |
---|---|
BindOpen.Data | > dotnet add package BindOpen.Data |
BindOpen.Scoping | > dotnet add package BindOpen.Scoping |
BindOpen.Dtos.Converters | > dotnet add package BindOpen.Dtos.Converters |
Data package offers a comprehensive data model based on metadata.
Define your data context using metadata.
var meta = BdoData.NewMeta("host", DataValueTypes.Text, "my-test-host");
Your configurations can, for instance, be defined as a set of metadata, allowing flexible and declarative setups.
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"))
Scoping package offers an effective mechanism for loading and using your extensions.
var scope = BdoScoping.NewScope()
.LoadExtensions(q => q.AddAllAssemblies());
Functions can be executed seamlessly using BindOpen's scripting capabilities.
// Define your script functions
[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 + "_";
}
...
// Interprete script
var exp = "$testFunction('MYTABLE', $text('MYTABLE_'))";
var result = scope.Interpreter.Evaluate<bool?>(exp);
// result is True
[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, "scoping.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);
Dtos.Converters provides packages to serialize and deserialize BindOpen.Kernel objects.
Serialize your models to JSON and XML with minimal configuration.
var metaSet = BdoData.NewSet("test-io").With(("host", "host-test"), ("address", "0.0.0.0"));
metaSet.ToDto().SaveXml("output.xml");
Models can be easily deserialized from JSON and XML formats.
var metaSet = JsonHelper.LoadJson<MetaSetDb>("output.xml").ToPoco();
This project is licensed under the terms of the MIT license. See LICENSE.
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.Dtos.Converters | Serialization / Deserialization |
BindOpen.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.
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.
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.
If you're having trouble with BindOpen, file a bug on the BindOpen Issue Tracker.
You are welcome to support this project. All donations are optional but are greatly appreciated.