### Install Zero Messenger Package Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Installs the Zero Messenger.R3 NuGet package using PowerShell. ```ps1 Install-Package ZeroMessenger.R3 ``` -------------------------------- ### Install Zero Messenger in Unity Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Instructions for installing the Zero Messenger package in Unity using NuGetForUnity. ```plaintext https://github.com/AnnulusGames/ZeroMessenger.git?path=src/ZeroMessenger.Unity/Assets/ZeroMessenger.VContainer ``` -------------------------------- ### Install Zero Messenger via .NET CLI Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Installs the Zero Messenger NuGet package using the .NET CLI. ```ps1 dotnet add package ZeroMessenger ``` -------------------------------- ### Install ZeroMessenger.DependencyInjection via Package Manager Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Installs the ZeroMessenger.DependencyInjection NuGet package using the Package Manager Console. ```ps1 Install-Package ZeroMessenger.DependencyInjection ``` -------------------------------- ### Install Zero Messenger via Package Manager Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Installs the Zero Messenger NuGet package using the Package Manager Console. ```ps1 Install-Package ZeroMessenger ``` -------------------------------- ### Quick Start: Custom MessageBroker Instance Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Shows how to use a custom `MessageBroker` instance, similar to C# events or Rx Subjects. Demonstrates subscribing, publishing, and disposing the broker. ```cs var broker = new MessageBroker(); broker.Subscribe(x => { Console.WriteLine(x); }); broker.Publish(10); broker.Dispose(); ``` -------------------------------- ### Install Zero Messenger via .NET CLI Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Installs the Zero Messenger NuGet package using the .NET CLI. Requires .NET Standard 2.1 or higher. ```ps1 dotnet add package ZeroMessenger ``` -------------------------------- ### Install ZeroMessenger.DependencyInjection via .NET CLI Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Installs the ZeroMessenger.DependencyInjection NuGet package using the .NET CLI for integrating with Microsoft.Extensions.DependencyInjection. ```ps1 dotnet add package ZeroMessenger.DependencyInjection ``` -------------------------------- ### Instance-based Pub/Sub with MessageBroker Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Shows how to use an instance of MessageBroker for publish/subscribe, similar to Rx's Subject. This example demonstrates subscribing, publishing an integer, and disposing the broker. ```cs var broker = new MessageBroker(); broker.Subscribe(x => { Console.WriteLine(x); }); broker.Publish(10); broker.Dispose(); ``` -------------------------------- ### Install ZeroMessenger.DependencyInjection via .NET CLI Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Installs the ZeroMessenger.DependencyInjection NuGet package using the .NET CLI, enabling DI integration. ```ps1 dotnet add package ZeroMessenger.DependencyInjection ``` -------------------------------- ### Install Zero Messenger via Package Manager Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Installs the Zero Messenger NuGet package using the Package Manager console. Requires .NET Standard 2.1 or higher. ```ps1 Install-Package ZeroMessenger ``` -------------------------------- ### Install ZeroMessenger.DependencyInjection via Package Manager Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Installs the ZeroMessenger.DependencyInjection NuGet package using the Package Manager console, enabling DI integration. ```ps1 Install-Package ZeroMessenger.DependencyInjection ``` -------------------------------- ### Quick Start: Global MessageBroker Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Demonstrates the basic usage of `MessageBroker.Default` for global publish/subscribe. Includes subscribing to messages, publishing a message, and disposing the subscription. Defines a simple `Message` record. ```cs using System; using ZeroMessenger; // メッセージを購読 var subscription = MessageBroker.Default.Subscribe(x => { Console.WriteLine(x.Text); }); // メッセージを発行 MessageBroker.Default.Publish(new Message("Hello!")); // 購読を解除 subscription.Dispose(); // メッセージに使用する型 public record struct Message(string Text) { } ``` -------------------------------- ### Unity VContainer Integration - Git URL Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md The Git URL to install the ZeroMessenger.VContainer package using the Unity Package Manager. ```plaintext https://github.com/AnnulusGames/ZeroMessenger.git?path=src/ZeroMessenger.Unity/Assets/ZeroMessenger.VContainer ``` -------------------------------- ### Install ZeroMessenger.R3 Package Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Command to add the ZeroMessenger.R3 package to your .NET project using the .NET CLI, enabling R3 integration. ```ps1 dotnet add package ZeroMessenger.R3 ``` -------------------------------- ### R3 Integration - CLI Installation Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Command to add the ZeroMessenger.R3 package to a .NET project using the .NET CLI. ```ps1 dotnet add package ZeroMessenger.R3 ``` -------------------------------- ### Creating a Logging Filter Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Provides an example of a filter that logs messages before and after processing by implementing IMessageFilter. ```cs public class LoggingFilter : IMessageFilter { public async ValueTask InvokeAsync(T message, CancellationToken cancellationToken, Func next) { Console.WriteLine("Before"); await next(message, cancellationToken); Console.WriteLine("After"); } } ``` -------------------------------- ### R3 Integration - Package Manager Installation Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Command to add the ZeroMessenger.R3 package to a project using a package manager. ```plaintext Install-Package ZeroMessenger.R3 ``` -------------------------------- ### Custom Filter Implementation Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Provides examples of creating custom message filters by implementing the IMessageFilter interface. Demonstrates the async decorator pattern for pre- and post-processing of messages. ```cs public class NopFilter : IMessageFilter { public async ValueTask InvokeAsync(T message, CancellationToken cancellationToken, Func next) { try { // 継続処理を呼び出す await next(context, cancellationToken); } catch { throw; } finally { } } } public class LoggingFilter : IMessageFilter { public async ValueTask InvokeAsync(T message, CancellationToken cancellationToken, Func next) { Console.WriteLine("Before"); await next(message, cancellationToken); Console.WriteLine("After"); } ``` -------------------------------- ### Unity VContainer Integration - Adding Zero Messenger Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Example of how to add Zero Messenger to a VContainer DI container in a Unity project by calling the AddZeroMessenger() extension method. ```cs using VContainer; using VContainer.Unity; using ZeroMessenger.VContainer; public class ExampleLifetimeScope : LifetimeScope { protected override void Configure(IContainerBuilder builder) { // Add Zero Messenger builder.AddZeroMessenger(); } } ``` -------------------------------- ### Pub/Sub with Generic Host and Dependency Injection Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Demonstrates integrating Zero Messenger with a Generic Host using Microsoft.Extensions.DependencyInjection. It shows how to register the messenger, publish messages from one service, and subscribe in another. ```cs using ZeroMessenger; using ZeroMessenger.DependencyInjection; Host.CreateDefaultBuilder() .ConfigureServices((context, services) => { // Add Zero Messenger services.AddZeroMessenger(); services.AddSingleton(); services.AddSingleton(); }) .Build() .Run(); public record struct Message(string Text) { } public class ServiceA { IMessagePublisher publisher; public ServiceA(IMessagePublisher publisher) { this.publisher = publisher; } public Task SendAsync(CancellationToken cancellationToken = default) { publisher.Publish(new Message("Hello!")); } } public class ServiceB : IDisposable { IDisposable subscription; public ServiceB(IMessageSubscriber subscriber) { subscription = subscriber.Subscribe(x => { Console.WriteLine(x); }); } public void Dispose() { subscription.Dispose(); } } ``` -------------------------------- ### Dependency Injection: Generic Host Integration Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Demonstrates integrating Zero Messenger with the Generic Host using `services.AddZeroMessenger()`. Includes sample services `ServiceA` (publisher) and `ServiceB` (subscriber) that utilize `IMessagePublisher` and `IMessageSubscriber` respectively. ```cs using ZeroMessenger; using ZeroMessenger.DependencyInjection; Host.CreateDefaultBuilder() .ConfigureServices((context, services) => { // Zero Messengerを追加する services.AddZeroMessenger(); services.AddSingleton(); services.AddSingleton(); }) .Build() .Run(); public record struct Message(string Text) { } public class ServiceA { IMessagePublisher publisher; public ServiceA(IMessagePublisher publisher) { this.publisher = publisher; } public Task SendAsync(CancellationToken cancellationToken = default) { publisher.Publish(new Message("Hello!")); } } public class ServiceB : IDisposable { IDisposable subscription; public ServiceB(IMessageSubscriber subscriber) { subscription = subscriber.Subscribe(x => { Console.WriteLine(x); }); } public void Dispose() { subscription.Dispose(); } } ``` -------------------------------- ### Basic Pub/Sub with MessageBroker.Default Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Demonstrates basic publish and subscribe functionality using the default MessageBroker instance. Includes subscribing to messages, publishing a message, and unsubscribing. ```cs using System; using ZeroMessenger; // Subscribe to messages var subscription = MessageBroker.Default.Subscribe(x => { Console.WriteLine(x.Text); }); // Publish a message MessageBroker.Default.Publish(new Message("Hello!")); // Unsubscribe subscription.Dispose(); // Type used for the message public record struct Message(string Text) { } ``` -------------------------------- ### R3 Integration - Converting to Observable and Subscribing Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Shows how to convert an IMessageSubscriber to an Observable and how to subscribe an Observable to an IMessagePublisher using R3 integration. ```cs // Convert IMessageSubscriber to Observable subscriber.ToObservable() .Subscribe(x => { }); // Subscribe to Observable and convert it to IMessagePublisher's Publish() observable.SubscribeToPublish(publisher); // SubscribeAwait to Observable and convert it to IMessagePublisher's PublishAsync() observable.SubscribeAwaitToPublish(publisher, AwaitOperation.Sequential, AsyncPublishStrategy.Parallel); ``` -------------------------------- ### Creating a Simple Filter Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Illustrates the implementation of a basic filter by creating a class that inherits from IMessageFilter and invoking the next processing step. ```cs public class NopFilter : IMessageFilter { public async ValueTask InvokeAsync(T message, CancellationToken cancellationToken, Func next) { try { // Call the next processing step await next(message, cancellationToken); } catch { throw; } finally { } } } ``` -------------------------------- ### IMessageSubscriber Usage Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Illustrates how to subscribe to messages using the IMessageSubscriber interface. Shows basic subscription with lambda expressions and asynchronous subscription with strategy options. ```cs IMessageSubscriber subscriber; // メッセージを購読する var subscription = subscriber.Subscribe(x => { Console.WriteLine(x.Text); }); // 購読を解除する subscription.Dispose(); var subscriptionAsync = subscriber.SubscribeAwait((x, ct) => { await FooAsync(x, ct); }, AsyncSubscribeStrategy.Sequential); ``` -------------------------------- ### IMessagePublisher Usage Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Demonstrates how to publish messages using IMessagePublisher, including fire-and-forget and asynchronous publishing with strategy options. ```cs IMessagePublisher publisher; // Publish a message (Fire-and-forget) publisher.Publish(new Message("Foo!")); // Publish a message and wait for all subscribers to finish processing await publisher.PublishAsync(new Message("Bar!"), AsyncPublishStrategy.Parallel, cancellationToken); ``` -------------------------------- ### IMessagePublisher Usage Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Demonstrates how to publish messages using the IMessagePublisher interface. Includes both fire-and-forget and asynchronous publishing with strategy options. ```cs IMessagePublisher publisher; // メッセージを発行する (Fire-and-forget) publisher.Publish(new Message("Foo!")); // メッセージを発行し、すべてのSubscriberの処理が終わるまで待機する await publisher.PublishAsync(new Message("Bar!"), AsyncPublishStrategy.Parallel, cancellationToken); ``` -------------------------------- ### Rx.NET Integration for Zero Messenger Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Demonstrates converting between IMessageSubscriber and Observable, and subscribing Observable to IMessagePublisher using Rx.NET operators. ```cs // IMessageSubscriberからObservableへ変換 subscriber.ToObservable() .Subscribe(x => { }); // ObservableをSubscribeし、IMessagePublisherのPublish()に変換 observable.SubscribeToPublish(publisher); // ObservableをSubscribeAwaitし、IMessagePublisherのPublishAsync()に変換 observable.SubscribeAwaitToPublish(publisher, AwaitOperation.Sequential, AsyncPublishStrategy.Parallel); ``` -------------------------------- ### IMessageSubscriber Usage Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Shows how to subscribe to messages using IMessageSubscriber with lambda expressions and asynchronous processing, including unsubscribe and async strategies. ```cs IMessageSubscriber subscriber; // Subscribe to messages var subscription = subscriber.Subscribe(x => { Console.WriteLine(x.Text); }); // Unsubscribe subscription.Dispose(); var subscription = subscriber.SubscribeAwait(async (x, ct) => { await FooAsync(x, ct); }, AsyncSubscribeStrategy.Sequential); ``` -------------------------------- ### Adding Filters to MessageBroker Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Shows how to add custom filters to the MessageBroker, both directly and globally via dependency injection. Demonstrates adding filters by type and using open generics. ```cs var broker = new MessageBroker(); // フィルターを追加 broker.AddFilter>(); Host.CreateDefaultBuilder() .ConfigureServices((context, services) => { services.AddZeroMessenger(messenger => { // 型を指定して追加 messenger.AddFilter>(); // open genericsで追加 messenger.AddFilter(typeof(LoggingFilter<>)); }); }) .Build() .Run(); ``` -------------------------------- ### Adding Filters to MessageBroker Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Demonstrates how to add filters directly to a MessageBroker instance using the AddFilter() method. ```cs var broker = new MessageBroker(); // Add a filter broker.AddFilter>(); ``` -------------------------------- ### Publisher/Subscriber Interfaces Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Defines the core interfaces for publishing and subscribing to messages: `IMessagePublisher` and `IMessageSubscriber`. `MessageBroker` implements both. ```cs public interface IMessagePublisher { void Publish(T message, CancellationToken cancellationToken = default); ValueTask PublishAsync(T message, AsyncPublishStrategy publishStrategy = AsyncPublishStrategy.Parallel, CancellationToken cancellationToken = default); } public interface IMessageSubscriber { IDisposable Subscribe(MessageHandler handler); IDisposable SubscribeAwait(AsyncMessageHandler handler, AsyncSubscribeStrategy subscribeStrategy = AsyncSubscribeStrategy.Sequential); } ``` -------------------------------- ### VContainer Integration for Zero Messenger Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Shows how to add Zero Messenger to a VContainer DI container in Unity, enabling injection of IMessagePublisher and IMessageSubscriber. ```cs using VContainer; using VContainer.Unity; using ZeroMessenger.VContainer; public class ExampleLifetimeScope : LifetimeScope { protected override void Configure(IContainerBuilder builder) { // Zero Messengerを追加 builder.AddZeroMessenger(); } } ``` -------------------------------- ### Adding Filters to Subscriber Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Demonstrates how to add filters to individual subscriptions using the WithFilter() and WithFilters() extension methods. ```cs IMessageSubscriber subscriber; subscriber .WithFilter>() .Subscribe(x => { }); ``` -------------------------------- ### Adding Global Filters via DI Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Shows how to configure global filters in the DI container using the AddZeroMessenger() method, including adding specific types and open generics. ```cs Host.CreateDefaultBuilder() .ConfigureServices((context, services) => { services.AddZeroMessenger(messenger => { // Specify the type to add messenger.AddFilter>(); // Add with open generics messenger.AddFilter(typeof(LoggingFilter<>)); }); }) .Build() .Run(); ``` -------------------------------- ### Adding Filters During Subscription Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Explains how to add filters to individual subscriptions using the WithFilter() and WithFilters() extension methods. ```cs IMessageSubscriber subscriber; subscriber .WithFilter>() .Subscribe(x => { }); ``` -------------------------------- ### IMessagePublisher Interface Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Defines the interface for publishing messages. It includes methods for synchronous and asynchronous publishing with options for publish strategy. ```cs public interface IMessagePublisher { void Publish(T message, CancellationToken cancellationToken = default); ValueTask PublishAsync(T message, AsyncPublishStrategy publishStrategy = AsyncPublishStrategy.Parallel, CancellationToken cancellationToken = default); } ``` -------------------------------- ### IMessageSubscriber Interface Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Defines the interface for subscribing to messages. It includes methods for subscribing with synchronous and asynchronous message handlers, with options for subscribe strategy. ```cs public interface IMessageSubscriber { IDisposable Subscribe(MessageHandler handler); IDisposable SubscribeAwait(AsyncMessageHandler handler, AsyncSubscribeStrategy subscribeStrategy = AsyncSubscribeStrategy.Sequential); } ``` -------------------------------- ### PredicateFilter Usage Source: https://github.com/annulusgames/zeromessenger/blob/main/README_JA.md Illustrates the use of the built-in PredicateFilter for conditional message processing. Shows how to filter messages based on a predicate directly in the subscription. ```cs public record struct FooMessage(int Value); IMessageSubscriber subscriber; subscriber .WithFilter(x => x.Value >= 0) // 0未満の値は除外 .Subscribe(x => { }); ``` -------------------------------- ### PredicateFilter Usage Source: https://github.com/annulusgames/zeromessenger/blob/main/README.md Demonstrates how to use PredicateFilter with IMessageSubscriber to filter messages based on a condition. The filter is automatically added when a predicate is provided to AddFilter or WithFilter. ```cs public record struct FooMessage(int Value); IMessageSubscriber subscriber; subscriber .WithFilter(x => x.Value >= 0) // Exclude values less than 0 .Subscribe(x => { }); ``` === COMPLETE CONTENT === This response contains all available snippets from this library. No additional content exists. Do not make further requests.