Files
ft/Client/Assets/Scripts/Activity/EventSubscriber/ActivitySubscriberManager.cs
2026-06-29 21:18:33 +08:00

37 lines
1.4 KiB
C#

using System;
using System.Collections.Generic;
using UnityEngine;
namespace Activity.EventSubscriber
{
public class ActivitySubscriberManager
{
private static List<IActivityEventSubscriber> _activityEventSubscribers;
// 已注册的订阅者类型,用于防止重复初始化
private static readonly HashSet<Type> _registeredSubscriberTypes = new();
public static List<IActivityEventSubscriber> ActivityEventSubscribers =>
_activityEventSubscribers ??= new List<IActivityEventSubscriber>();
public static void InitEventSubscriber(Type type)
{
try
{
var res = typeof(IActivityEventSubscriber).IsAssignableFrom(type) && type.IsClass;
if (!res) return;
// 同一个订阅者类型只初始化一次,避免 Stage 重进导致重复订阅
if (_registeredSubscriberTypes.Contains(type)) return;
_activityEventSubscribers ??= new List<IActivityEventSubscriber>();
_activityEventSubscribers.Add((IActivityEventSubscriber)Activator.CreateInstance(type));
_registeredSubscriberTypes.Add(type);
}
catch (Exception e)
{
Debug.LogError($"[ActivitySubscriberManager] Error processing type {type.Name}: {e.Message}");
}
}
}
}