如何将事件发布到IObservable <t>

时间:2018-03-04 07:48:12

标签: rx.net

所以说我有以下课程:

public class User
{
    public IObservable<IEvent> Events { get; }

    public User(Guid id, string username, string password) => Events = Observable.Return(new UserCreated(id, username, password));

    public void ChangeUsername(string username)
    {
        // TODO: Append a ChangeUsername event to the sequence of events
    }
}

如何将ChangeUsername(实现IEvent)附加到我的事件序列中?并且还会通知我的订户已发生ChangeUsername事件。

1 个答案:

答案 0 :(得分:0)

你拥有它的方式,你不能。 Events绑定到Observable.Return的结果,它返回一个值然后完成。没有更多的价值观

最简单的入门方式可能是使用Subject

public class User
{
    private readonly Subject<IEvent> _subject = new Subject<IEvent>();
    public IObservable<IEvent> Events => _subject;

    public User(Guid id, string username, string password) => _subject.OnNext(new UserCreated(id, username, password));

    public void ChangeUsername(string username)
    {
        _subject.OnNext(new ChangeUserName(username));
    }
}

public interface IEvent
{}

public class ChangeUserName : IEvent
{
    public ChangeUserName(string userName) {}
}

public class UserCreated : IEvent
{
    public UserCreated(Guid id, string userName, string password){}
}