🐕

VContainer最新版ではMessagePipeの登録が簡単になっている

2024/05/07に公開

VContainer v1.14.0 で、MessagePipe の登録が簡単になりました。

これまでの登録方法

これまでの登録方法は以下のようになります。

using MessagePipe;
using UnityEngine;
using VContainer;
using VContainer.Unity;

public sealed class GameLifetimeScope : LifetimeScope
{
    protected override void Configure(IContainerBuilder builder)
    {
        var options = builder.RegisterMessagePipe(); // MessagePipe の登録

        builder.RegisterMessageBroker<FooMessage>(options); // MessageBroker の登録
    }
}

最新版の登録方法

最新版では、以下のように RegisterMessagePipe メソッドを呼ぶだけで MessagePipe の登録が完了します。

using MessagePipe;
using UnityEngine;
using VContainer;
using VContainer.Unity;

public sealed class GameLifetimeScope : LifetimeScope
{
    protected override void Configure(IContainerBuilder builder)
    {
        builder.RegisterMessagePipe(); // MessagePipe の登録(これで終わり!!)
    }
}

あとは従来通り ISubscriber<T>IPublisher<T>を使って MessagePipe を利用するだけです。

利用例
using MessagePipe;
using UnityEngine;

public record FooMessage
{
    public string Message { get; }

    public FooMessage(string message)
    {
        Message = message;
    }
}

public sealed class FooPublisher : MonoBehaviour
{
    [Inject] private readonly IPublisher<FooMessage> _publisher;

    private int _count;

    private void Update()
    {
        var message = "Hello, World! " + _count++;
        _publisher.Publish(new FooMessage(message));
    }
}

public sealed class FooSubscriber : MonoBehaviour
{
    [Inject] private readonly ISubscriber<FooMessage> _subscriber;

    private void Start()
    {
        _subscriber.Subscribe(foo =>
        {
            Debug.Log(foo.Message);
        });
    }
}

Discussion