Я работаю над мобильным приложением в чате, используя Xamarin.iOS
У меня есть класс MessageServices, который генерирует событие MessageAddedToDB
И у меня есть класс Services, в котором я инициализирую класс MessageServices
Services.cs
public MessageServices messageService;
public IObservable<ChatMessage> receivedMessageObservable;
public IObservable<ChatMessage> messageSuccessfullySentObservable;
public Services()
{
messageService = new MessageServices();
messageService.MessageAddedToDB += (message) =>
{
Debug.WriteLine(message.Message); //This gets fired
}
AddObservables();
}
public void AddObservables()
{
receivedMessageObservable = Observable.FromEvent<MessageAddedToDBEventHandler, ChatMessage>(
(handler) =>
{
MessageAddedToDBEventHandler messageAddedToDBEventHandler = (ChatMessage m) =>
{
handler(m);
};
return messageAddedToDBEventHandler;
},
ev => messageService.MessageAddedToDB += ev,
ev => messageService.MessageAddedToDB -= ev);
receivedMessageObservable.Subscribe(onNext: (m) =>
{
Debug.WriteLine(m.Message); // This gets fired
}
messageSuccessfullySentObservable = Observable.FromEvent<MessageSuccessfullySentEventHandler, ChatMessage>
(
(handler) =>
{
MessageSuccessfullySentEventHandler messageSuccessfullySentEventHandler = (ChatMessage m) =>
{
handler(m);
};
return messageSuccessfullySentEventHandler;
},
ev => httpHandler.MessageSuccessfullySent += ev,
ev => httpHandler.MessageSuccessfullySent -= ev
);
}
Действие подписчика onNext и обработчик события запускаются
Однако при подписке на receiveMessageObservable из ViewController.cs действие подписчикаДействие onNext никогда не вызывается.
В методе ViewDidLoad () ViewController я инициализирую новый экземпляр Services и подписываюсь на его наблюдаемые
ViewController.cs
Services services;
IDisposable receivedMessageSubscriber;
IDisposable messageSentSubscriber;
public override void ViewDidLoad()
{
services = new Services();
AddSubscribers();
}
public void AddSubscribers()
{
receivedMessageSubscriber =
services
.receivedMessageObservable
.Subscribe(onNext: (m) =>
{
Debug.WriteLine(m.Message); //This doesn't get fired
});
messageSentSubscriber =
services
.messageSuccessfullySentObservable.Subscribe((m) => {
Debug.WriteLine(m.Message); //This gets fired
});
}
У меня есть другие наблюдаемыенапример messageSuccessfullySentObservable
в классе Services
, где я инициализирую их так же, как receivedMessageObservable
.Подписчики в ViewController
также инициализируются так же, как и в receivedMessageSubscriber
.Действия других подписчиков увольняют.