public static void RegisterPackets(PacketEndPoint endPoint, PacketUsage packetUsage) { Assembly assembly = Assembly.GetExecutingAssembly (); IEnumerable<Type> possiblePackets = assembly.GetTypes ().Where(a => a.GetCustomAttributes<PacketUsageAttribute> ().Any()); foreach (Type item in possiblePackets) { var usage = item.GetCustomAttribute<PacketUsageAttribute> (); if ((usage.PacketUsage & packetUsage) == packetUsage) { var packet = (Packet) Activator.CreateInstance(item); endPoint.RegisterPacket(packet.Code, item); } } }
// This is a positional argument public PacketUsageAttribute(PacketUsage packetUsage) { _packetUsage = packetUsage; }