using System.Collections.Generic;
public static void Main()
var t = new MyExporter();
var configs = t.Configurations;
foreach(var conf in configs){
Console.WriteLine(conf.Name);
public interface IExportConfiguration<T>{
string Description {get;}
public abstract class ExportConfiguration<T>
: IExportConfiguration<T>
public abstract string Description { get; }
public abstract string Name { get; }
public abstract Guid Id { get; }
public abstract T Value { get; set; }
public abstract T DefaultValue { get; set; }
public virtual void SetValue(ICollection<KeyValuePair<Guid, object>> values)
if (values.Any(kvp => kvp.Key == this.Id))
Value = (T)values.First(kvp => kvp.Key == this.Id).Value;
Value = this.DefaultValue == null ? this.DefaultValue : default(T);
public interface IConfigurableExport {
ICollection<IExportConfiguration<object>> Configurations {get;}
public class MyConfig : ExportConfiguration<bool> {
public override string Description { get { return "This is my description"; }}
public override string Name { get{ return "My Config Name"; }}
public override Guid Id { get { return Guid.Parse("b6a9b81d-412d-4aa8-9090-37c9deb1a9f4"); }}
public override bool Value { get; set;}
public override bool DefaultValue { get; set;}
public class MyExporter : IConfigurableExport {
MyConfig conf = new MyConfig();
public ICollection<IExportConfiguration<object>> Configurations {
return new List<IExportConfiguration<object>> { (IExportConfiguration<object>)conf };