Esempio n. 1
0
 /// <summary>
 /// Returns an object instance to serve as the next object in the prototype chain.
 /// </summary>
 /// <param name="engine"> The associated script engine. </param>
 /// <param name="instance"> The CLR object instance to wrap. </param>
 /// <returns> The next object in the prototype chain. </returns>
 private static ObjectInstance GetPrototypeObject(ScriptEngine engine, object instance)
 {
     if (engine == null)
     {
         throw new ArgumentNullException("engine");
     }
     if (instance == null)
     {
         throw new ArgumentNullException("instance");
     }
     return(ClrInstanceTypeWrapper.FromCache(engine, instance.GetType()));
 }
 /// <summary>
 /// Returns an object instance to serve as the next object in the prototype chain.
 /// </summary>
 /// <param name="engine"> The associated script engine. </param>
 /// <param name="type"> The CLR type to wrap. </param>
 /// <returns> The next object in the prototype chain. </returns>
 private static ObjectInstance GetPrototypeObject(ScriptEngine engine, Type type)
 {
     if (engine == null)
     {
         throw new ArgumentNullException("engine");
     }
     if (type == null)
     {
         throw new ArgumentNullException("type");
     }
     if (type.BaseType == null)
     {
         return(null);
     }
     return(ClrInstanceTypeWrapper.FromCache(engine, type.BaseType));
 }
        //     INITIALIZATION
        //_________________________________________________________________________________________

        /// <summary>
        /// Retrieves a ClrInstanceTypeWrapper object from the cache, if possible, or creates it
        /// otherwise.
        /// </summary>
        /// <param name="engine"> The associated script engine. </param>
        /// <param name="type"> The CLR type to wrap. </param>
        public static ClrInstanceTypeWrapper FromCache(ScriptEngine engine, Type type)
        {
            if (!engine.EnableExposedClrTypes)
            {
                throw new JavaScriptException(engine, "TypeError", "Unsupported type: CLR types are not supported.  Enable CLR types by setting the ScriptEngine's EnableExposedClrTypes property to true.");
            }

            ClrInstanceTypeWrapper cachedInstance;

            if (engine.InstanceTypeWrapperCache.TryGetValue(type, out cachedInstance))
            {
                return(cachedInstance);
            }
            var newInstance = new ClrInstanceTypeWrapper(engine, type);

            engine.InstanceTypeWrapperCache.Add(type, newInstance);
            return(newInstance);
        }