protected override KeyValuePair <Type, IPacketHandler> ExtractHandler(Type handlerMetaType) { var packetType = PacketHandlerClassAttribute.FindPacketHandlerGenericInterface(handlerMetaType) .GenericTypeArguments[0]; var packetHandler = Activator.CreateInstance(handlerMetaType) as IPacketHandler; return(new KeyValuePair <Type, IPacketHandler>(packetType, packetHandler)); }
protected override KeyValuePair <Type, HandlePacketGeneric> ExtractHandler(Type handlerMetaType) { var packetType = PacketHandlerClassAttribute.FindPacketHandlerGenericInterface(handlerMetaType) .GenericTypeArguments[0]; var genericDelegateFactory = GetType().GetMethod(nameof(CreateHandlerDelegate), BindingFlags.NonPublic | BindingFlags.Static); var typedDelegateFactory = genericDelegateFactory.MakeGenericMethod(packetType); var packetHandler = Activator.CreateInstance(handlerMetaType) as IPacketHandler; var instance = typedDelegateFactory.Invoke(null, new object[] { packetHandler }); var packetHandlerDelegate = instance as HandlePacketGeneric; return(new KeyValuePair <Type, HandlePacketGeneric>(packetType, packetHandlerDelegate)); }