yapsi.Extensions.DependencyInjection 2.0.0

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

// Install yapsi.Extensions.DependencyInjection as a Cake Tool
#tool nuget:?package=yapsi.Extensions.DependencyInjection&version=2.0.0                

yapsi

yet another pub-sub implementation

Provides simple interfaces for publishing/subscribing to generic data "packets".

Usage

using yapsi.Default;

// create a pipeline somewhere and make it available (through dependency injection for example)
// the generic parameter is the type of data being transported by the pipeline
var pipeline = new Pipeline<string>();

// ...somewhere you want to provide data from
var contract = pipeline.Bind();

// ...somewhere else where you want to consume the data
var subscription = pipeline.Subscribe();
subscription.Published += (sender, message) => Console.WriteLine(message);

// publish some data
contract.Publish("Hello from the other side");
contract.Publish("Hello again");

Run the yapsi.Example project to see how it works.

You can add as many contracts and subscriptions you want, which means you could create a factory for injecting subscriptions into your services:

Program.cs

    // ...
    
    .ConfigureServices(services =>
    {
        // ...
    
        services.AddSingleton<Pipeline<string>>();

        services.AddTransient<IContract<string>>((sp) =>
        {
            var pipeline = sp.GetRequiredService<Pipeline<string>>();

            return pipeline.Bind();
        });

        services.AddTransient<ISubscription<string>>((sp) =>
        {
            var pipeline = sp.GetRequiredService<Pipeline<string>>();

            return pipeline.Subscribe();
        });

        services.AddHostedService<Worker>();
    })
    
    // ...

Worker.cs

    public class Worker : BackgroundService
    {
        private readonly ILogger<Worker> _logger;
        private readonly ISubscription<string> _subscription;
        private readonly IContract<string> _contract;

        public Worker(ILogger<Worker> logger, ISubscription<string> subscription, IContract<string> contract)
        {
            _logger = logger;
            _subscription = subscription;
            _contract = contract;
        }

        protected override async Task ExecuteAsync(CancellationToken stoppingToken)
        {
            // ideally, you would have some service supplying data and another service consuming the data, but
            // this example shows how the dependency injection works
            
            _subscription.Published += (sender, data) =>
            {
                _logger.LogInformation("Received data from pipeline: {data}", data);
            };

            while (!stoppingToken.IsCancellationRequested)
            {
                _contract.Publish($"Worker running at: {DateTimeOffset.Now}");

                await Task.Delay(1000, stoppingToken);
            }
        }
    }

Run the yapsi.HostedExample project to see this in action.

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.

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
2.1.2 299 12/28/2021
2.1.1 301 10/16/2021
2.0.2 311 10/12/2021
2.0.1 319 10/12/2021
2.0.0 314 10/12/2021