🐕
VContainer最新版ではMessagePipeの登録が簡単になっている
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