Xamarin.Forms MessagingCenter
Yayımla-abone ol düzeni, yayımcıların abone olarak bilinen hiçbir alıcı hakkında bilgi sahibi olmadan ileti gönderdiği bir mesajlaşma düzenidir. Benzer şekilde, aboneler herhangi bir yayımcı hakkında bilgi sahibi olmadan belirli iletileri dinler.
.NET'teki olaylar yayımlama-abone olma desenini uygular ve denetim ve onu içeren sayfa gibi gevşek bağlama gerekli değilse bileşenler arasındaki iletişim katmanı için en basit ve basit yaklaşımdır. Ancak, yayımcı ve abone yaşam süreleri birbirine yapılan nesne başvuruları ile birleştirilir ve abone türünün yayımcı türüne bir başvurusu olmalıdır. Bu, özellikle statik veya uzun ömürlü bir nesnenin olayına abone olan kısa süreli nesneler olduğunda bellek yönetimi sorunları oluşturabilir. Olay işleyicisi kaldırılmazsa, abone yayımcıdaki başvuru tarafından canlı tutulur ve bu, abonenin çöp toplamasını engeller veya geciktirecektir.
Xamarin.Forms
MessagingCenter sınıfı yayımla-abone ol desenini uygulayarak nesneye ve tür başvurularına göre bağlanması uygun olmayan bileşenler arasında ileti tabanlı iletişime olanak sağlar. Bu mekanizma, yayımcıların ve abonelerin birbirlerine başvuruda bulunmadan iletişim kurmasına olanak sağlayarak aralarındaki bağımlılıkların azaltılmasına yardımcı olur.
sınıfı çok
MessagingCenter noktaya yayın yayımla-abone ol işlevselliği sağlar. Bu, tek bir iletiyi yayımlayan birden çok yayımcı olabileceği ve aynı iletiyi dinleyen birden çok abone olabileceği anlamına gelir:
Yayımcılar yöntemini kullanarak
MessagingCenter.Send ileti gönderirken, aboneler yöntemini kullanarak
MessagingCenter.Subscribe iletileri dinler. Ayrıca aboneler gerekirse yöntemiyle ileti aboneliklerinin aboneliğini
MessagingCenter.Unsubscribe kaldırabilir.
Önemli
Sınıfı dahili
MessagingCenter olarak zayıf başvurular kullanır. Bu, nesneleri canlı tutmayacağı ve bunların çöp toplamasına izin edeceği anlamına gelir. Bu nedenle, yalnızca sınıf artık iletiyi almak istemediğinde ileti aboneliğini kaldırmanız gerekir.
İleti yayımlama
MessagingCenter.Send<MainPage>(this, "Hi");
Bu örnekte yöntem,
Send göndereni temsil eden genel bir bağımsız değişken belirtir. İletiyi almak için abonenin de aynı genel bağımsız değişkeni belirtmesi ve bu bağımsız değişkenin gönderenden gelen bir iletiyi dinlediğini belirtmesi gerekir. Ayrıca, bu örnekte iki yöntem bağımsız değişkeni belirtmektedir:
- İlk bağımsız değişken gönderen örneğini belirtir.
- İkinci bağımsız değişken iletiyi belirtir.
Yük verileri bir iletiyle de gönderilebilir:
MessagingCenter.Send<MainPage, string>(this, "Hi", "John");
Bu örnekte yöntemi iki
Send genel bağımsız değişken belirtir. Birincisi iletiyi gönderen tür, ikincisi de gönderilen yük verilerinin türüdür. İletiyi almak için abonenin de aynı genel bağımsız değişkenleri belirtmesi gerekir. Bu, bir ileti kimliğini paylaşan ancak farklı yük veri türleri gönderen birden çok iletinin farklı aboneler tarafından alınmasını sağlar. Ayrıca, bu örnek aboneye gönderilecek yük verilerini temsil eden üçüncü bir yöntem bağımsız değişkenini belirtir. Bu durumda yük verileri bir
stringolur.
Send yöntemi, fire-and-forget yaklaşımını kullanarak iletiyi ve tüm yük verilerini yayımlar. Bu nedenle, iletiyi almak için kayıtlı aboneler olmasa bile ileti gönderilir. Bu durumda, gönderilen ileti yoksayılır.
İletiye abone olma
Aboneler, aşırı yüklemelerden birini
MessagingCenter.Subscribe kullanarak bir ileti almak için kaydolabilir. Aşağıdaki kod örneği bunun bir örneğini gösterir:
MessagingCenter.Subscribe<MainPage> (this, "Hi", (sender) => { // Do something whenever the "Hi" message is received });
Bu örnekte yöntemi,
Subscribe nesnesini türü tarafından
MainPage gönderilen iletilere
Hi abone eder
this ve iletiyi almaya yanıt olarak bir geri çağırma temsilcisi yürütür. Lambda ifadesi olarak belirtilen geri çağırma temsilcisi, kullanıcı arabirimini güncelleştiren, bazı verileri kaydeden veya başka bir işlemi tetikleyen kod olabilir.
Not
Abonenin yayımlanan iletinin her örneğini işlemesi gerekmeyebilir ve bu, yönteminde
Subscribe belirtilen genel tür bağımsız değişkenleri tarafından denetlenebilir.
Aşağıdaki örnek, yük verilerini içeren bir iletiye nasıl abone olunduğunu gösterir:
MessagingCenter.Subscribe<MainPage, string>(this, "Hi", async (sender, arg) => { await DisplayAlert("Message received", "arg=" + arg, "OK"); });
Bu örnekte yöntemi,
Subscribe yük verileri bir olan türü tarafından
MainPage gönderilen iletilere
stringabonedir
Hi. Geri çağırma temsilcisi, yük verilerini bir uyarıda görüntüleyen böyle bir iletinin alınmasına yanıt olarak yürütülür.
Önemli
yöntemi tarafından
Subscribe yürütülen temsilci, yöntemini kullanarak iletiyi yayımlayan aynı iş parçacığında
Send yürütülür.
İleti aboneliğini kaldırma
Aboneler artık almak istemedikleri iletilerin aboneliğini kaldırabilir. Bu, aşırı yüklemelerden
MessagingCenter.Unsubscribe biriyle elde edilir:
MessagingCenter.Unsubscribe<MainPage>(this, "Hi");
Bu örnekte yöntemi,
Unsubscribe türü tarafından gönderilen iletiden nesnenin
this
Hi aboneliğini
MainPage kaldırır.
Yük verilerini içeren iletilerin aboneliği iki genel bağımsız değişken belirten aşırı yükleme kullanılarak
Unsubscribe kaldırılmalıdır:
MessagingCenter.Unsubscribe<MainPage, string>(this, "Hi");
Bu örnekte yöntemi,
Unsubscribe yük verileri bir
stringolan türü tarafından gönderilen iletiden
Hi nesnenin
MainPage aboneliğini
this kaldırır.