Exemplo n.º 1
0
 public RuntimeDirective(ModelDirective modelDir, int index)
 {
     Source          = modelDir;
     Index           = index;
     Def             = modelDir.Def;
     Location        = modelDir.Location;
     StaticArgValues = modelDir.ArgValues;
 }
Exemplo n.º 2
0
        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();
        }
Exemplo n.º 3
0
 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
 }
Exemplo n.º 4
0
 public RuntimeDirectiveBase(DirectiveDef dirDef, DirectiveLocation location)
 {
     Def      = dirDef;
     Location = location;
 }