public RuntimeDirective(ModelDirective modelDir, int index) { Source = modelDir; Index = index; Def = modelDir.Def; Location = modelDir.Location; StaticArgValues = modelDir.ArgValues; }
public object[] StaticArgValues; // dirs that do not use variables, or model directives public RuntimeDirective(RequestDirective reqDir, int index) { Source = reqDir; Index = index; Owner = reqDir.Parent; Def = reqDir.Def; Location = reqDir.Location; MappedArgs = reqDir.MappedArgs; StaticArgValues = reqDir.MappedArgs.TryEvaluateStaticArgValues(); }
private void RegisterAllModuleDirectives() { foreach (var module in _server.Modules) { foreach (var dirReg in module.Directives) { var dirName = dirReg.Name.TrimStart('@'); if (_model.Directives.ContainsKey(dirName)) { AddError($"Module {module.Name}: directive @{dirName} already registered."); continue; } if (dirReg.Signature == null && dirReg.AttributeType == null) { AddError($"Module {module.Name}: directive @{dirName} has no Signature method or Attribute type."); continue; } ICustomAttributeProvider attrSrc; if (dirReg.AttributeType != null) { attrSrc = dirReg.AttributeType; var constrList = dirReg.AttributeType.GetConstructors(BindingFlags.Public | BindingFlags.Instance); if (constrList.Length != 1) { AddError($"Module {module.Name}: directive @{dirName}, the attribute {dirReg.AttributeType} " + " must have a single public constructor as a template for directive signature."); continue; } dirReg.Signature = constrList[0]; } else { attrSrc = dirReg.Signature; } // create dir def // first check secondary depr attribute - in case the target directive is deprecated itself var deprAttrSec = attrSrc.GetAttribute <DeprecatedDirAttribute>(); var prms = dirReg.Signature.GetParameters(); var argDefs = BuildArgDefs(prms, dirReg.Signature); var dirDef = new DirectiveDef() { Registration = dirReg, Name = dirName, Description = dirReg.Description, DeprecatedAttribute = deprAttrSec, Args = argDefs }; _model.Directives[dirName] = dirDef; } } //foreach module }
public RuntimeDirectiveBase(DirectiveDef dirDef, DirectiveLocation location) { Def = dirDef; Location = location; }