예제 #1
0
        static internal object ToFactoryObject(ClassFactory classFactory, InspectableAdapter adapter)
        {
            if (adapter == null)
            {
                return(null);
            }
            InspectableAdapter inspectableAdapter;
            EnumValueAdapter   enumValueAdapter = adapter as EnumValueAdapter;

            if (enumValueAdapter != null)
            {
                return(ToEnumValue(classFactory, enumValueAdapter));
            }
            PropertyValueAdapter pvAdapter = adapter as PropertyValueAdapter;

            if (pvAdapter != null)
            {
                if (pvAdapter.PropertyType == PropertyType.InspectableArray)
                {
                    IntPtr[] arrayObjects   = pvAdapter.GetInspectableArray();
                    object[] factoryObjects = new object[arrayObjects.Length];
                    for (int index = 0; index < arrayObjects.Length; ++index)
                    {
                        inspectableAdapter    = ObjectStaticsUtil.CreateInspectable(arrayObjects[index]);
                        factoryObjects[index] = ToFactoryObject(classFactory, inspectableAdapter);
                    }
                    return(factoryObjects);
                }
                return(pvAdapter.ToObject());
            }

            ObjectAdapter objectAdapter = adapter as ObjectAdapter;

            if (objectAdapter != null)
            {
                return(ToObject(classFactory, objectAdapter));
            }
            DictionaryAdapter dictionaryAdapter = adapter as DictionaryAdapter;

            if (dictionaryAdapter != null)
            {
                return(new Dictionary(dictionaryAdapter, classFactory));
            }
            inspectableAdapter = adapter as InspectableAdapter;
            if (inspectableAdapter != null)
            {
                return(new FactoryObject <InspectableAdapter>(inspectableAdapter, classFactory));
            }
            throw new NotImplementedException();
        }
예제 #2
0
        static internal object ToEnumValue(ClassFactory classFactory, EnumValueAdapter adapter)
        {
            uint value = adapter.EnumValue;

            if (classFactory != null)
            {
                Guid iid = adapter.RuntimeType;
                Type type;
                if (classFactory._objectTypes.TryGetValue(iid, out type))
                {
                    return(Enum.ToObject(type, value));
                }
            }
            return(value);
        }