private object CreateInstanceUsingCreator(Dictionary<string, object> values)
{
var creatorMap = ChooseBestCreator(values);
var obj = creatorMap.CreateInstance(values); // removes values consumed
var supportsInitialization = obj as ISupportInitialize;
if (supportsInitialization != null)
{
supportsInitialization.BeginInit();
}
// process any left over values that weren't passed to the creator
foreach (var keyValuePair in values)
{
var elementName = keyValuePair.Key;
var value = keyValuePair.Value;
var memberMap = _classMap.GetMemberMapForElement(elementName);
if (!memberMap.IsReadOnly)
{
memberMap.Setter.Invoke(obj, value);
}
}
if (supportsInitialization != null)
{
supportsInitialization.EndInit();
}
return obj;
}