PowerPipe 1.1.1
See the version list below for details.
dotnet add package PowerPipe --version 1.1.1
NuGet\Install-Package PowerPipe -Version 1.1.1
<PackageReference Include="PowerPipe" Version="1.1.1" />
paket add PowerPipe --version 1.1.1
#r "nuget: PowerPipe, 1.1.1"
// Install PowerPipe as a Cake Addin #addin nuget:?package=PowerPipe&version=1.1.1 // Install PowerPipe as a Cake Tool #tool nuget:?package=PowerPipe&version=1.1.1
<p align="center"> <img src="https://github.com/mvSapphire/PowerPipe/blob/master/assets/readme-header.png?raw=true" alt="drawing" width="250"/> </p>
<span align="center">
</span>
A .NET Library for Constructing Advanced Workflows with Fluent Interface
PowerPipe is a versatile .NET library designed to streamline the process of building advanced workflows using a fluent interface. The primary objective of this project is to eliminate the need for writing boilerplate code when implementing workflows.
Check out Medium article 👀
If you like this project give it a star 🌟
🔥 Features and Benefits
- Lightweight
- Fluent interface
- Ease & Structured Workflow construction
- Dependency Injection support
- Developed using .NET 6
🧐 Sample use case
Imagine creating an e-commerce platform. The platform must process incoming customer orders, each demanding validation, inventory updates, and potentially more intricate steps.
public class ECommercePipelineService : IECommercePipelineService
{
private readonly IPipelineStepFactory _pipelineStepFactory;
private bool PaymentSucceed(ECommerceContext context) => context.PaymentResult.Status is PaymentStatus.Success;
public ECommercePipelineService(IPipelineStepFactory pipelineStepFactory)
{
_pipelineStepFactory = pipelineStepFactory;
}
public IPipeline<OrderResult> BuildPipeline()
{
var context = new ECommerceContext();
return new PipelineBuilder<ECommerceContext, OrderResult>(_pipelineStepFactory, context)
.Add<OrderValidationStep>()
.Add<PaymentProcessingStep>()
.OnError(PipelineStepErrorHandling.Retry, retryInterval: TimeSpan.FromSeconds(2), maxRetryCount: 2)
.If(PaymentSucceed, b => b
.Add<OrderConfirmationStep>()
.Add<InventoryReservationStep>())
.Parallel(b => b
.Add<CustomerNotificationsStep>()
.Add<AnalyticsAndReportingStep>(), maxDegreeOfParallelism: 2)
.Build();
}
}
🛠️ Getting started
Installation
- Package Manager Console
Install-Package PowerPipe
Install-Package PowerPipe.Extensions.MicrosoftDependencyInjection
- .NET CLI
dotnet add package PowerPipe
dotnet add package PowerPipe.Extensions.MicrosoftDependencyInjection
Building pipeline
- Create pipeline context and result
public class SampleContext : PipelineContext<SampleResult>
{
// Properties and methods specific to the context
}
public class SampleResult
{
// Implementation details
}
- Create pipeline steps
public class SampleStep1 : IPipelineStep<SampleContext>
{
// Implementation details…
}
public class SampleStep2 : IPipelineStep<OrderContext>
{
// Implementation details…
}
- Define your pipeline
- Use
Add<T>
method to add a step to your pipeline
var pipeline = new PipelineBuilder<OrderProcessingContext, Order>()
.Add<SampleStep1>()
.Add<SampleStep2>()
.Build();
- Use
AddIf<T>
method to add a step to the pipeline based on the predicate
// Define predicate based on context
private bool ExecuteStep2(OrderProcessingContext context) =>
context.ExecuteStep2Allowed;
var pipeline = new PipelineBuilder<OrderProcessingContext, Order>()
.Add<SampleStep1>()
.AddIf<SampleStep2>(ExecuteStep2)
.Build();
- Use
AddIfElse<TFirst, TSecond>
method to add one of the steps by the predicate
private bool ExecuteStep2(OrderProcessingContext context) =>
context.ExecuteStep2Allowed;
var pipeline = new PipelineBuilder<OrderProcessingContext, Order>()
.AddIfElse<SampleStep1, SampleStep2>(ExecuteStep2)
.Build();
- Use
If
method to add a nested pipeline based on a predicate
private bool ExecuteNestedPipeline(OrderProcessingContext context) =>
context.ExecuteNestedPipelineAllowed;
var pipeline = new PipelineBuilder<OrderProcessingContext, Order>()
.If(ExecuteNestedPipeline, b => b
.Add<SampleStep1>()
.Add<SampleStep2>())
.Build();
- Use
Parallel
method to execute your steps in parallel
In order to execute steps in parallel your steps should implement
IPipelineParallelStep<TContext>
interface
var pipeline = new PipelineBuilder<OrderProcessingContext, Order>()
.Parallel(b => b
.Add<SampleParallelStep1>()
.Add<SampleParallelStep2>(), maxDegreeOfParallelism: 3)
.Build();
- Use
OnError
method to add error-handling behavior
Currently available only two types of error handling
Suppress
andRetry
var pipeline = new PipelineBuilder<OrderProcessingContext, Order>()
.Add<SampleStep1>()
.OnError(PipelineStepErrorHandling.Retry)
.Build();
- Use
CompensateWith
method to add a compensation step to the previously added step in the pipeline
Compensation steps should implement
IPipelineCompensationStep<TContext>
public class SampleStep1Compensation : IPipelineCompensationStep<SampleContext> {}
var pipeline = new PipelineBuilder<OrderProcessingContext, Order>()
.Add<SampleStep1>()
.CompensateWith<SampleStep1Compensation>()
.Build();
- Extensions: Microsoft Dependency Injection
The
PowerPipe.Extensions.MicrosoftDependencyInjection
extension provides integration with Microsoft Dependency Injection.
- Use
AddPowerPipe
to register step factory
public static IServiceCollection AddPowerPipe(this IServiceCollection serviceCollection)
- Use
AddPowerPipeStep
,AddPowerPipeParallelStep
,AddPowerPipeCompensationStep
methods to register your steps
services
.AddPowerPipeStep<SampleStep1, SampleContext>()
.AddPowerPipeParallelStep<SampleParallelStep1, SampleContext>()
.AddPowerPipeCompensationStep<SampleStep1Compensation, SampleContext>()
// other steps ...
;
Check out sample project 👀
Product | Versions 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. |
-
net6.0
- No dependencies.
NuGet packages (2)
Showing the top 2 NuGet packages that depend on PowerPipe:
Package | Downloads |
---|---|
PowerPipe.Extensions.MicrosoftDependencyInjection
A library for .NET that uses a fluent interface to construct advanced workflows with ease |
|
PowerPipe.Visualization
A library for .NET that uses a fluent interface to construct advanced workflows with ease |
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated |
---|---|---|
3.0.0 | 4,113 | 7/31/2024 |
2.0.0 | 1,535 | 3/22/2024 |
1.2.0 | 17,456 | 11/13/2023 |
1.1.2 | 414 | 9/21/2023 |
1.1.1 | 205 | 9/12/2023 |
1.1.0 | 202 | 9/11/2023 |
1.0.3 | 5,310 | 7/17/2023 |
1.0.2 | 11,462 | 2/8/2023 |
1.0.1 | 675 | 1/16/2023 |
1.0.0 | 427 | 1/3/2023 |
0.1.10 | 4,978 | 5/10/2022 |
0.1.9 | 549 | 5/10/2022 |
0.1.8 | 580 | 5/6/2022 |
0.1.7 | 569 | 5/5/2022 |
0.1.6 | 599 | 4/21/2022 |
0.1.5 | 580 | 4/21/2022 |
0.1.4 | 603 | 4/21/2022 |
0.1.3 | 601 | 4/18/2022 |
0.1.2 | 622 | 2/14/2022 |
0.1.1 | 578 | 2/14/2022 |
0.1.0 | 636 | 2/14/2022 |