Пример #1
0
        Trait BuildTraitGeneric <T>(Payload payload, PayloadBuilder builder) where T : struct
        {
            T value = payload.GetValue <T>();

            Type runtimeType =
                PayloadUtilities.GenericArgumentTypeFromTagInterface(
                    typeof(T));

            return(InvokeGenericMethod(runtimeType,
                                       nameof(BuildTraitGenericPayload), value, builder));
        }
        public static Type FindTypeByPayloadArgumentType(Type payloadArgType)
        {
            if (k_PayloadArgTypeToTagType == null)
            {
                k_PayloadArgTypeToTagType = new Dictionary <string, Type>();
                foreach (Type type in GetTypes())
                {
                    Type argType = PayloadUtilities.GenericArgumentTypeFromTagInterface(type);
                    if (k_PayloadArgTypeToTagType.ContainsKey(argType.Name))
                    {
                        // log error that two tag types have the same payload argument
                        continue;
                    }


                    k_PayloadArgTypeToTagType.Add(argType.Name, type);
                }
            }

            k_PayloadArgTypeToTagType.TryGetValue(payloadArgType.FullName, out Type tagType);
            return(tagType);
        }
 public static bool IsMarkerType(Type type)
 {
     Assert.IsTrue(type != null);
     return(HasMarkerAttribute(type) && PayloadUtilities.ImplementsPayloadInterface(type));
 }