示例#1
0
        void VisitAttribute(PhpExtensionAttribute attr)
        {
            if (attr == null)
            {
                return;
            }

            var extensions = attr.Extensions;

            if (extensions != null)
            {
                for (int i = 0; i < extensions.Length; i++)
                {
                    EnsureExtensionInfo(extensions[i]);
                }
            }

            var registrator = attr.Registrator;

            if (registrator != null)
            {
                Debug.WriteLine($"Creating '{registrator.FullName}' ...");
                Activator.CreateInstance(registrator); // CONSIDER: dependency injection, global service provider
            }
        }
示例#2
0
 void VisitExtensionAttribute(PhpExtensionAttribute attr)
 {
     if (attr.Registrator != null && _touchedRegistrators.Add(attr.Registrator.TypeHandle))
     {
         Activator.CreateInstance(attr.Registrator);
         Debug.WriteLine($"Object of type {attr.Registrator.FullName} has been activated.");
     }
 }
示例#3
0
        void AddRoutine(PhpExtensionAttribute extension, ClrRoutineInfo routine)
        {
            var extensions = extension.Extensions;

            for (int i = 0; i < extensions.Length; i++)
            {
                EnsureExtension(extensions[i]).Routines.Add(routine);
            }
        }
示例#4
0
        /// <summary>
        /// Adds routine within its associated extension(s).
        /// </summary>
        /// <param name="attr">Corresponding <see cref="PhpExtensionAttribute"/> of the containing class. Can be <c>null</c>.</param>
        /// <param name="routine">Library routine to be included into the table.</param>
        internal void AddRoutine(PhpExtensionAttribute attr, ClrRoutineInfo /*!*/ routine)
        {
            if (attr == null)
            {
                return;
            }

            var extensions = attr.Extensions;

            for (int i = 0; i < extensions.Length; i++)
            {
                EnsureExtensionInfo(extensions[i]).Routines.Add(routine);
            }
        }
示例#5
0
        /// <summary>
        /// Reflects <see cref="PhpExtensionAttribute"/> of given type once.
        /// </summary>
        /// <returns>Value indicating the type was visited for the first time.</returns>
        internal bool VisitFunctionsContainer(Type /*!*/ container, out PhpExtensionAttribute attr)
        {
            if (_processed.Add(container))
            {
                VisitAssembly(container.Assembly);

                VisitAttribute(attr = container.GetCustomAttribute <PhpExtensionAttribute>());

                return(true);
            }
            else
            {
                attr = null;
                return(false);
            }
        }
示例#6
0
 void AddRoutine(PhpExtensionAttribute extension, ClrRoutineInfo routine)
 {
     var extensions = extension.Extensions;
     for (int i = 0; i < extensions.Length; i++)
     {
         EnsureExtension(extensions[i]).Add(routine);
     }
 }