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 } }
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."); } }
void AddRoutine(PhpExtensionAttribute extension, ClrRoutineInfo routine) { var extensions = extension.Extensions; for (int i = 0; i < extensions.Length; i++) { EnsureExtension(extensions[i]).Routines.Add(routine); } }
/// <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); } }
/// <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); } }
void AddRoutine(PhpExtensionAttribute extension, ClrRoutineInfo routine) { var extensions = extension.Extensions; for (int i = 0; i < extensions.Length; i++) { EnsureExtension(extensions[i]).Add(routine); } }