Apps.Contextsphere 1.3.4

Additional Details

Warning: Versions 7.0.0 or higher have breaking changes.

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

// Install Apps.Contextsphere as a Cake Tool
#tool nuget:?package=Apps.Contextsphere&version=1.3.4

Overview

Contextsphere facilitates clean separation of concerns by encapsulating app's functionalities in each its own context.

This design pattern is primarily aimed at front-end development usage. Whence a developer can write code in CQRS-oriented fashion without the bulk of using message buses/hubs.

Usage

Build your app's contexts in the root node class of your choice.

    public class MyRootNode : IRootNode, IHandle<MyHandledObject1>, IHandleAsync<MyHandledAsyncObject1> ...  
    {  
        ...
    }

In the root node's constructor:

    public MyRootNode(IContext context, IRootNodeObject rootNodeObject, IChildNode1Object childNode1Object, IChildNode2Object childNode2Object ...)
    {
        // 01.  core app context
         var rootContext = context.CreateContext(this, ContextType.Permanent);
    
        // 02.  first child context
        rootContext.CreateContext(new MyChildNode1(childNode1Object), ContextType.Permanent)
    
        // 03.  second child context (subsequent creation can be chained)
        .CreateContext(new MyChildNode2(childNode2Object), ContextType.Permanent)
    
        ...
        
        this.Context = rootContext;
    }

In the consuming classes, use dependency injection to access instance of IRootNode.

private readonly IRootNode root;

...

// send calls thru the root node.
MyObject? result1 = root.Context.Handle<MyObject>();
MyObject? result2 = await root.Context.HandleAsync<MyObject>();
MyObject? result3 = root.Context.Handle<MyParam, MyObject>(myParamInstance);
MyObject? result4 = await root.Context.HandleAsync<MyParam, MyObject>(myParamInstance);

// void or Task
root.Context.Handle<MyObject>(myObjectInstance);
await root.Context.HandleAsync<MyObject>(myObjectInstance);

// validation
bool isValid = root.Context.Validate<MyObject>(myObjectInstance);  
bool isValid = await root.Context.ValidateAsync<MyObject>(myObjectInstance);  
IValidationDetail<MyObject> validationDetails1 = root.Context.ValidateDetailed<MyObject>(myObjectInstance);  
IValidationDetail<MyObject> validationDetails2 = await root.Context.ValidateDetailedAsync<MyObject>(myObjectInstance);  

Context node classes provides the handling logic

public class MyContextNode1 : IHandleNoParamAsync<IEnumerable<MyObject>>, ...
{
    public async Task<IEnumerable<MyObject>?> HandleAsync()
    {
        ...
    }
}  

Concerns/Feedbacks?

You may reach me thru jakes_parane@hotmail.ph. Happy coding!

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.
  • net6.0

    • No dependencies.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
8.0.1 222 12/6/2023
7.1.6 135 11/12/2023
7.1.5 104 11/12/2023
7.1.4 88 11/12/2023
7.1.3 101 11/12/2023
7.1.2 87 11/12/2023
7.1.1 95 11/12/2023
7.1.0 103 11/11/2023
7.0.9 109 11/11/2023
7.0.8 91 11/11/2023
7.0.7 136 10/25/2023
7.0.6 125 10/25/2023
7.0.5 122 10/24/2023
7.0.4 118 10/17/2023
7.0.3 145 10/15/2023
1.3.4 411 8/26/2022