static internal InspectableAdapter ToAdapter(object o) { if (o == null) { return(null); } InspectableAdapter inspectableAdapter = o as InspectableAdapter; if (inspectableAdapter != null) { return(inspectableAdapter); } IFactoryObject factoryObject = o as IFactoryObject; // If we find an 'IFactoryObject' we will need to return the underlying Interface if (factoryObject != null) { return(factoryObject.Adapter); } if (o.GetType() == typeof(object[])) { object[] objs = (object[])o; IntPtr[] objectAdapters = new IntPtr[objs.Length]; for (int index = 0; index < objs.Length; ++index) { inspectableAdapter = ToAdapter(objs[index]); objectAdapters[index] = inspectableAdapter != null ? inspectableAdapter.Interface : IntPtr.Zero; } return(new PropertyValueAdapter(objectAdapters)); } // we assume can be constructed by a PropertyValue return(PropertyValueAdapter.CreateValue(o)); }
private void AddToCache(ulong uniqueId, IObject instance) { this.CachedObjects[uniqueId] = new WeakReference <IObject>(instance); if (LoggerAdapter.IsAvailable() && LoggerAdapter.FoundationInstance.GetCategoryLevel(null) >= LoggerLevel.Debug) { string typeName = instance.GetType().ToString(); IntPtr[] pParameters = new IntPtr[2]; pParameters[0] = new PropertyValueAdapter(uniqueId).Detach(); pParameters[1] = new PropertyValueAdapter(typeName).Detach(); LoggerAdapter.LogMessage(LoggerLevel.Debug, 1, "AddToCache", new PropertyValueAdapter(pParameters)); } }
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(); }