Ладно, друзья, у меня следующая проблема:
Я хочу подключить события универсальных производных классов к универсальному методу не универсального мастер-класса.
Проблема в том, что она говорит мнеподписи не помещаются:
ArgumentException: невозможно связать с целевым методом, поскольку его подпись отличается от подписи типа делегата
. Вот некоторые журналы:
когда событие является делегатом: Denis<T1>() where T1 : IFieldUpdater;
handlerType: _FieldUpdater`1+Denis`1[IFieldUpdater,IFieldUpdater]
methodInfo: Void UpdateSubscribers[T2]()
когда событие является делегатом: Denis()
handlerType: _FieldUpdater`1+Denis[IFieldUpdater]
methodInfo: Void UpdateSubscribers[T2]()
И если бы я знал, как сделать здесь расширяемые / складные коробки, это было бы замечательно, поэтому я мог бы вставить следующие подходящие строки:
public static class FieldUpdateMaster
{
private static void HookUpdaters()
{
Type updater = typeof(_FieldUpdater<IFieldUpdater>);
object instance = updater.GetProperty(nameof(_FieldUpdater<IFieldUpdater>.Instance),
BindingFlags.FlattenHierarchy |
BindingFlags.Static |
BindingFlags.Public)
?.GetValue(null); // get static Singleton Instance
EventInfo eventInfo = updater.GetEvent(nameof(_FieldUpdater<IFieldUpdater>.UpdateSubscribers));
MethodInfo methodInfo = typeof(FieldUpdateMaster).GetMethod(nameof(UpdateSubscribers),
BindingFlags.NonPublic | BindingFlags.Static);
Debug.Log($"handlerType: {eventInfo.EventHandlerType}\n" +
$"methodInfo: {methodInfo}");
Delegate del = Delegate.CreateDelegate(eventInfo.EventHandlerType, methodInfo);
eventInfo.AddMethod.Invoke(instance, new object[] {del});
}
private static void UpdateSubscribers<T2>() where T2 : IFieldUpdater{...}
}
//_AbstractSingleton creates an Instance of the First SubType of _FieldUpdater<T>
public abstract class _FieldUpdater<T> : _AbstractSingleton<_FieldUpdater<T>> where T : IFieldUpdater
{
protected internal abstract Type[] Types { get; }
public event Action OnFieldUpdate;
public delegate void Denis<T1>() where T1 : IFieldUpdater;
public event Denis<T> UpdateSubscribers;
}
Дело в том, что японятия не имею, что делать сейчас.HELP ^^