たとえば
public interface IDomainEventHandler { bool CanHandle(IDomainEvent e); void Handle(IDomainEvent e); }
というインタフェースがあるとき
EventBus.Register(new IDomainEventHandler { public bool CanHandle(IDomainEvent e) { return e is ProjectCreatedEvent; } public void Handle(IDomainEvent e) { // なんかやる } });
という風に書きたいことがたまにある。Java は書けるけど、C# では書けない。
今のところは
public class DelegateEventHandler : IDomainEventHandler { private Func<IDomainEvent, bool> _canHandle; private Action<IDomainEvent> _handle; public DelegateEventHandler(Func<IDomainEvent, bool> canHandle, Action<IDomainEvent> handle) { _canHandle = canHandle; _handle = handle; } public bool CanHandle(IDomainEvent e) => _canHandle(e); public void Handle(IDomainEvent e) => _handle(e); }
みたいなクラスを作って
EventBus.Register(new DelegateEventHandler( e => e is ProjectCreatedEvent, e => { /* なんかやる */ } ));
ってな感じで書いてはいるけど、このときだけは Java が羨ましい。