2 using System.Collections;
 
    3 using System.Collections.Generic;
 
    5 using System.Runtime.Serialization;
 
    6 using Microsoft.VisualStudio.TextTemplating;
 
    8 namespace SiliconStudio.ProjectTemplating
 
   12         private readonly ExpandoObject expando;
 
   15         public CustomTemplateSession(
IEnumerable<KeyValuePair<string, object>> options)
 
   17             if (options == null) 
throw new ArgumentNullException(
"options");
 
   19             expando = 
new ExpandoObject();
 
   20             this.backend = expando;
 
   23             foreach (var option 
in options)
 
   25                 this[option.Key] = option.Value;
 
   29         public dynamic Expando
 
   39             return ReferenceEquals(
this, other);
 
   42         public bool Equals(Guid other)
 
   47         public Guid Id { 
get; set; }
 
   49         public IEnumerator<KeyValuePair<string, object>> GetEnumerator()
 
   51             return backend.GetEnumerator();
 
   54         public void Add(KeyValuePair<string, object> item)
 
   64         public bool Contains(KeyValuePair<string, object> item)
 
   66             return backend.Contains(item);
 
   69         public void CopyTo(KeyValuePair<string, object>[] array, 
int arrayIndex)
 
   71             backend.CopyTo(array, arrayIndex);
 
   74         public bool Remove(KeyValuePair<string, object> item)
 
   76             return backend.Remove(item);
 
   87         public bool IsReadOnly
 
   91                 return backend.IsReadOnly;
 
   95         public bool ContainsKey(
string key)
 
   97             return backend.ContainsKey(key);
 
  100         public void Add(
string key, 
object value)
 
  102             backend.Add(key, value);
 
  105         public bool Remove(
string key)
 
  107             return backend.Remove(key);
 
  110         public bool TryGetValue(
string key, out 
object value)
 
  112             return backend.TryGetValue(key, out value);
 
  115         public object this[
string key]
 
  120                 backend.TryGetValue(key, out value);
 
  125                 backend[key] = value;
 
  141                 return backend.Values;
 
  146         IEnumerator IEnumerable.GetEnumerator()
 
  148             return GetEnumerator();
 
  151         public void GetObjectData(SerializationInfo info, StreamingContext context)
 
  153             throw new NotImplementedException();
 
SiliconStudio.Paradox.Input.Keys Keys