using Tango.Editors; using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Runtime.Serialization.Formatters.Binary; using System.Text; using System.Threading.Tasks; /// /// /// A collection of extension methods. /// public static class IConfigurationExtensions { /// /// Creates a new instance of the configurable. /// /// /// The configuration. /// public static T CreateConfigurable(this IConfiguration config) where T : class { return CreateConfigurable(config, new ConfigurationAnimation()); } /// /// Creates a new instance of the exact type provided and apply the configuration. /// /// /// The configuration. /// public static T CreateConfigurableForceType(this IConfiguration config) where T : class { return CreateConfigurableForceType(config, new ConfigurationAnimation()); } /// /// Creates a new instance of the configurable. /// /// /// The configuration. /// The animation configuration. /// public static T CreateConfigurable(this IConfiguration config, ConfigurationAnimation animation) where T : class { IConfigurable instance = Activator.CreateInstance(config.ConfigurableType) as IConfigurable; instance.SetConfiguration(config, animation); return instance as T; } /// /// Creates a new instance of the configurable. /// /// The configuration. /// public static object CreateConfigurable(this IConfiguration config) { return CreateConfigurable(config, new ConfigurationAnimation()); } /// /// Creates a new instance of the configurable. /// /// The configuration. /// The animation. /// public static object CreateConfigurable(this IConfiguration config, ConfigurationAnimation animation) { IConfigurable instance = Activator.CreateInstance(config.ConfigurableType) as IConfigurable; instance.SetConfiguration(config, animation); return instance; } /// /// Creates a new instance of the exact type provided and apply the configuration. /// /// /// The configuration. /// The animation. /// public static T CreateConfigurableForceType(this IConfiguration config, ConfigurationAnimation animation) where T : class { IConfigurable instance = Activator.CreateInstance() as IConfigurable; instance.SetConfiguration(config, animation); return instance as T; } /// /// Saves the configuration as a file. /// /// The configuration. /// The file path. public static void SaveToFile(this IConfiguration config, String filePath) { using (FileStream fs = new FileStream(filePath, FileMode.Create)) { BinaryFormatter f = new BinaryFormatter(); f.Serialize(fs, config); } } /// /// Saves to configuration to a stream. /// /// The configuration. /// The stream. public static void SaveToStream(this IConfiguration config, Stream stream) { BinaryFormatter f = new BinaryFormatter(); f.Serialize(stream, config); } }