public static Type?GetType(JObject jObject) { var typeToken = jObject["Type"]; var typeName = typeToken?.Value <string>(); if (typeName != null) { return(TypeAssemblyLoader.GetType(typeName)); } return(null); }
/// <summary> /// Gets the setups. /// </summary> /// <returns> /// The setups. /// </returns> public async Task <IEnumerable <ISetup> > GetSetupsAsync() { var setups = new ConcurrentBag <ISetup>(); foreach (var typeName in this.typeNames) { foreach (var setup in await((ISetupsFactory)Activator.CreateInstance(TypeAssemblyLoader.GetType(typeName))).GetSetupsAsync().ConfigureAwait(false)) { setups.Add(setup); } } return(setups); }
public override object?ReadJson(JsonReader reader, Type objectType, object?existingValue, JsonSerializer serializer) { JObject item = JObject.Load(reader); var generatorTypeObject = item[GeneratorPropertyName]; if (generatorTypeObject != null) { var generatorType = TypeAssemblyLoader.GetType(generatorTypeObject.Value <string>()); var interfaceType = generatorType?.GetGenericInterface(typeof(IGenerator <, , , , ,>)); if (interfaceType != null) { var generatorSetupType = typeof(GeneratorSetup); if (interfaceType.GenericTypeArguments.Length >= 3 && typeof(IGeneratorSetup).GetTypeInfo().IsAssignableFrom(interfaceType.GenericTypeArguments[1].GetTypeInfo())) { generatorSetupType = interfaceType.GenericTypeArguments[1]; } if (generatorSetupType?.IsAbstract != false) { generatorSetupType = DefaultImplementation.GetDefaultImplementationType(generatorSetupType); } if (generatorSetupType?.IsAbstract != false) { generatorSetupType = objectType; } this.isActive = true; this.lastGeneratorSetup = (IGeneratorSetup?)item.ToObject(generatorSetupType, serializer); this.isActive = false; return(this.lastGeneratorSetup); } throw new JsonReaderException($"Error: The generator type: {generatorType} is invalid or is a type that does not implement {typeof(IGenerator<,,,>)}, {typeof(IGenerator<,,,,>)} or {typeof(IGenerator<,,,,,>)}."); } if (this.lastGeneratorSetup != null) { this.isActive = true; var newObject = item.ToObject(this.lastGeneratorSetup.GetType(), serializer); this.isActive = false; return(newObject); } throw new JsonReaderException("Error: No generator setup was specified and no previous generator setup was found."); }
public static Type?GetSetupTypeFromInterface(JToken token, Type genericInterfaceType, int setupTypeIndex) { var setupType = TypeAssemblyLoader.GetType(token.Value <string>()); var interfaceType = setupType?.GetGenericInterface(genericInterfaceType); if (interfaceType != null) { var defaultImplementationType = DefaultImplementation.GetDefaultImplementationType(interfaceType.GenericTypeArguments[setupTypeIndex]); if (defaultImplementationType != null) { return(defaultImplementationType); } throw new JsonReaderException($"Error: No instantiable setup type was found for {setupType}."); } return(null); }