Ctrl+K

اشتراک و لغو اشتراک رویدادها در توت فرنگی

اشتراک در رویدادها

دو روش اصلی برای اشتراک در یک رویداد در سیستم رویداد توت فرنگی وجود دارد.

۱. اشتراک جهانی (Global Subscription)

گاهی اوقات می‌خواهید بدون توجه به اینکه کدام شیء خاص رویداد را فراخوانی کرده، به آن واکنش نشان دهید. این را اشتراک جهانی می‌گویند.

EventManager.Subscribe<SomeEvent>(MyCallbackMethod, 100);
.
.
.
MyCallbackMethod(SomeEvent e) {
}

e شیء رویداد است. معمولاً داده‌هایی را که می‌خواهید در callback استفاده کنید، شامل می‌شود

کد بالا نشان می‌دهد چگونه به صورت جهانی در SomeEvent با اولویت ۱۰۰ اشتراک کنید. هر callback با اولویت کمتر بعد از این فراخوانی می‌شود.

نحوه کار اشتراک جهانی

وقتی به صورت جهانی اشتراک می‌کنید، یک فرستنده خاص مشخص نمی‌کنید. هر زمان که هر شیئی SomeEvent را فراخوانی کند، callback شما اجرا می‌شود.

نکته: فراخواننده همچنان باید خودش را به عنوان فرستنده بفرستد (مثلاً EventManager.Invoke<SomeEvent>(this, ...)).

۲. اشتراک در یک نمونه خاص (Instance Subscription)

بیشتر مواقع می‌خواهید فقط به رویدادهای یک نمونه خاص گوش دهید.

EventManager.Subscribe<SomeEvent>(someObject, MyCallbackMethod, 100);

حالا MyCallbackMethod فقط وقتی فراخوانی می‌شود که someObject رویداد را invoke کند.

هر دو متد Subscribe یک SubscriptionToken برمی‌گردانند که بعداً برای لغو اشتراک استفاده می‌شود.

لغو اشتراک از رویدادها

می‌توانید با استفاده از توکن برگشتی توسط Subscribe لغو اشتراک کنید:

SubscriptionToken token = EventManager.Subscribe<SomeEvent>(MyCallbackMethod, 100);
// بعداً...
EventManager.Unsubscribe(token);

یا به صورت مستقیم:

EventManager.Unsubscribe<SomeEvent>(MyCallbackMethod);

برای اشتراک‌های نمونه‌ای:

EventManager.Unsubscribe<SomeEvent>(someObject, MyCallbackMethod);

نکته مهم: اجباری نیست که دستی لغو اشتراک کنید. سیستم به صورت خودکار هنگام نابودی اشیاء، اشتراک‌ها را پاکسازی می‌کند. با این حال، لغو دستی برای کنترل بهتر توصیه می‌شود.


مطالعه بیشتر: