Нет, немного не так. Речь именно о хранении внутри робота.
В роботе много стратегий может быть и хорошо уметь с ними работать как с одним типом данных - чтобы обращаться, сериализовать, ....
2 варианта, которые я видел:
1) Хранить настройки стратегий в виде Dictionary<string, object>
2) Наследоваться от интерфейса и хранить настройки в классах.
Я выбрал первый вариант как наиболее простой и понятный.
Есть только 1 проблема - Dictionary<string, object> не является сериализуемым.
Но и эта проблема, после поисков в инете, легко решилась.
Кому необходимо - используйте SerializableDictionary:
Codeusing System;
using System.Runtime.Serialization;
using System.Xml;
using System.Collections.Generic;
using System.Xml.Serialization;
namespace Robots.Entities
{
[Serializable]
[XmlRoot("dictionary")]
public class SerializableDictionary<TKey, TValue> : Dictionary<TKey, TValue>, IXmlSerializable
{
public SerializableDictionary() { }
protected SerializableDictionary(SerializationInfo info, StreamingContext context) : base(info, context) { }
#region IXmlSerializable Members
public System.Xml.Schema.XmlSchema GetSchema()
{
return null;
}
public void ReadXml(XmlReader reader)
{
var keySerializer = new XmlSerializer(typeof(TKey));
var valueSerializer = new XmlSerializer(typeof(TValue));
var wasEmpty = reader.IsEmptyElement;
reader.Read();
if (wasEmpty) return;
while (reader.NodeType != XmlNodeType.EndElement)
{
reader.ReadStartElement("item");
reader.ReadStartElement("key");
var key = (TKey)keySerializer.Deserialize(reader);
reader.ReadEndElement();
reader.ReadStartElement("value");
var value = (TValue)valueSerializer.Deserialize(reader);
reader.ReadEndElement();
Add(key, value);
reader.ReadEndElement();
reader.MoveToContent();
}
reader.ReadEndElement();
}
public void WriteXml(XmlWriter writer)
{
var keySerializer = new XmlSerializer(typeof(TKey));
var valueSerializer = new XmlSerializer(typeof(TValue));
foreach (var key in Keys)
{
writer.WriteStartElement("item");
writer.WriteStartElement("key");
keySerializer.Serialize(writer, key);
writer.WriteEndElement();
writer.WriteStartElement("value");
var value = this[key];
valueSerializer.Serialize(writer, value);
writer.WriteEndElement();
writer.WriteEndElement();
}
}
#endregion
}
}
[cool]
А вот уже все настройки действительно сохраняются легко в AppConfig.