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);
}
}