private void Subscribe(UnmanagedDispose disposable, MethodInfo methodInfo, string name) { var parms = methodInfo.GetParameters(); var types = parms.Select(x => x.ParameterType).ToArray(); var hash = HashCode.Combine(types); if (!_eventWireUpCache.TryGetValue(hash, out var wire)) { wire = new EventAutoWire(hash, types); _eventWireUpCache.Add(hash, wire); } disposable.Track(wire.Subscribe(_events, disposable, methodInfo, name)); }
public void Subscribe(UnmanagedDispose disposable) { var type = disposable.GetType(); var methods = from method in type.GetMethods(BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance) select new { method, attr = method.GetCustomAttribute <EventAttribute>() }; foreach (var m in methods) { if (m.attr != null) { var name = m.attr?.Name ?? m.method.Name; Subscribe(disposable, m.method, name); } } }
public IDisposable Subscribe(IEventManager events, UnmanagedDispose disposable, MethodInfo mi, string name) { if (Types.Length > 0) { var action = typeof(Action <>); var genericAction = action.MakeGenericType(Types); var dg = mi.CreateDelegate(genericAction, disposable); return(_wireUp(events, name, dg)); } else { var dg = mi.CreateDelegate(typeof(Action), disposable); return(_wireUp(events, name, dg)); } }