Пример #1
0
 public static void Add(IMiddleware MiddleWare)
 {
     Attribute[] attrs = Attribute.GetCustomAttributes(MiddleWare.GetType());
     foreach (Attribute attr in attrs)
     {
         if (attr is MiddlewareAttribute middle)
         {
             Add(MiddleWare, middle.Name, middle.Priority);
         }
     }
 }
Пример #2
0
        /// <summary>
        /// Uses singleton middleware objects.
        /// Same object is used for all requests
        /// </summary>
        public void UseMiddleware(IMiddleware middleware)
        {
            MiddlewareDescriptor desc = new MiddlewareDescriptor
            {
                Instance              = middleware,
                MiddlewareType        = middleware.GetType(),
                ConstructorParameters = null
            };

            Descriptors.Add(desc);
        }
Пример #3
0
        public void Build()
        {
            var pipeline = new PipelineBuilder()
                           .Add(new ResultHandlerMiddleware())
                           .Add(new PrepareStatementMiddleware())
                           .Add(new InitializerMiddleware())
                           .Add(new CachingMiddleware())
                           .Add(new CommandExecuterMiddleware())
                           .Add(new DataSourceFilterMiddleware())
                           .Add(new TransactionMiddleware())
                           .Build();

            Assert.Equal(typeof(InitializerMiddleware), pipeline.GetType());
            IMiddleware middleware = pipeline.Next;

            Assert.Equal(typeof(PrepareStatementMiddleware), middleware.GetType());
            middleware = middleware.Next;
            Assert.Equal(typeof(CachingMiddleware), middleware.GetType());
            middleware = middleware.Next;
            Assert.Equal(typeof(TransactionMiddleware), middleware.GetType());
            middleware = middleware.Next;
            Assert.Equal(typeof(DataSourceFilterMiddleware), middleware.GetType());
            middleware = middleware.Next;
            Assert.Equal(typeof(CommandExecuterMiddleware), middleware.GetType());
            middleware = middleware.Next;
            Assert.Equal(typeof(ResultHandlerMiddleware), middleware.GetType());
        }
Пример #4
0
 private static uint?ID(IMiddleware MiddleWare)
 {
     Attribute[] attrs = Attribute.GetCustomAttributes(MiddleWare.GetType());
     foreach (Attribute attr in attrs)
     {
         if (attr is MiddlewareAttribute)
         {
             MiddlewareAttribute mw = (MiddlewareAttribute)attr;
             return(mw.ID);
         }
     }
     return(null);
 }
Пример #5
0
            public async Task <MiddlewareData> NextAsync(MiddlewareData data)
            {
                var sw = new Stopwatch();

                sw.Start();
                var result = await GetInstance().InvokeAsync(data, new TimerChainElement(sw, _next));

                sw.Stop();

                _logger.LogDebug($"Middleware {(_instance?.GetType() ?? _type).Name} completed in {sw.ElapsedMilliseconds} ms ()");

                return(result);
            }
Пример #6
0
        internal MiddlewareException(IMiddleware Middleware, Exception innerException) : base(innerException.Message, innerException)
        {
            this.Middleware = Middleware;

            var type = Middleware.GetType();

            this.Tag = type.Name;

            var attrs = type.GetCustomAttributes(Web.Middleware.Middleware.AttributeType, true);

            Attribute = new MiddlewareAttribute[attrs.Length];
            for (int i = 0; i < Attribute.Length; i++)
            {
                Attribute[i] = (MiddlewareAttribute)attrs[i];
            }
        }
Пример #7
0
        private void Dump(IMiddleware middleware, string indent)
        {
            var router = middleware as IRouter;

            if (router != null)
            {
                Dump(router, indent);
                return;
            }

            Debug.WriteLine(indent + "Middleware " + middleware.GetType().Name + " \"" + (middleware.Name ?? "<anonymous>") + "\"");
            indent += "  ";

            foreach (var dependency in middleware.Dependencies)
            {
                Dump(dependency, indent);
            }
        }
Пример #8
0
        public static bool Add(IMiddleware MiddleWare, string Name, MiddlewarePriority Priority = MiddlewarePriority.Normal)
        {
            string name = Name == null?MiddleWare.GetType().Name : Name;

            try
            {
                MiddleWare.Attach(Language);
                if (!Middlewares.ContainsKey(Priority))
                {
                    Middlewares.Add(Priority, new List <IMiddleware>());
                }
                Middlewares[Priority].Add(MiddleWare);

                Adding?.Invoke(string.Format("[{0}] MiddleWare: {{ {1} ({2}) }}, Priority={3} }}", Language["STR_SUCCESS"], name, MiddleWare.GetType().Name, Priority), null);
                return(true);
            }
            catch (Exception ex)
            {
                Adding?.Invoke(string.Format("[{0}] MiddleWare: {{ {1} ({2}) }}, Priority={3} }} ({4})", Language["STR_ERROR"], name, MiddleWare.GetType().Name, Priority, ex.Message), null);
                return(false);
            }
        }
Пример #9
0
 private static bool IsMiddleware(IMiddleware x)
 {
     return(!x.GetType().ImplementsInterface <IPreMiddleware>() && !x.GetType().ImplementsInterface <ISystemMiddleware>());
 }
Пример #10
0
 private static bool IsPreMiddleware(IMiddleware x)
 {
     return(x.GetType().ImplementsInterface <IPreMiddleware>());
 }
Пример #11
0
        private Positioned PositionMiddleware(IMiddleware middleware)
        {
            var router = middleware as IRouter;

            if (router != null)
            {
                return(PositionRouter(router));
            }

            var lines = new List <string>();

            lines.Add("Middleware " + middleware.GetType().Name);

            if (string.IsNullOrEmpty(middleware.Name))
            {
                lines.Add("<anonymous>");
            }
            else
            {
                lines.Add("\"" + middleware.Name + "\"");
            }

            var selfDocumenting = middleware as ISelfDocumenting;

            if (selfDocumenting != null)
            {
                lines.Add(selfDocumenting.ShortDescription);
            }

            var configurable = middleware as IConfigurable;

            if (configurable != null)
            {
                var line = "Configurable";
                if (selfDocumenting != null)
                {
                    var configurationUrl = selfDocumenting.GetDocumentation(DocumentationTypes.Configuration);
                    if (configurationUrl != null)
                    {
                        line += " (see " + configurationUrl + ")";
                    }
                }
                lines.Add(line);
            }

            var analysable = middleware as IAnalysable;

            if (analysable != null)
            {
                foreach (var stat in analysable.AvailableStatistics)
                {
                    var value = analysable.GetStatistic(stat.Id);
                    if (value != null)
                    {
                        value.Refresh();
                        lines.Add(stat.Name + " " + value.Formatted);
                    }
                }
            }

            var longestLine = lines.Select(l => l.Length).Max();

            return(new Positioned
            {
                Width = longestLine * 6.5f,
                Height = TextHeight * (lines.Count + 2),
                DrawAction = (d, p) =>
                {
                    DrawBox(d, p.X, p.Y, p.Width, lines, "middleware", 2f);
                }
            });
        }
        private void AddStats(IList <AnalysableInfo> stats, IMiddleware middleware, IList <IMiddleware> analysedMiddleware)
        {
            var analysable = middleware as IAnalysable;

            if (analysable != null)
            {
                var analysableInfo = new AnalysableInfo
                {
                    Name       = middleware.Name,
                    Type       = middleware.GetType().FullName,
                    Statistics = new List <StatisticInfo>()
                };

                if (string.IsNullOrEmpty(analysableInfo.Name))
                {
                    analysableInfo.Name = middleware.GetType().Name;
                }

                var selfDocumenting = middleware as ISelfDocumenting;
                if (selfDocumenting != null)
                {
                    analysableInfo.Description = selfDocumenting.ShortDescription;
                    analysableInfo.Links       = new List <DocumentationLink>();
                    foreach (var documentTypeValue in Enum.GetValues(typeof(DocumentationTypes)))
                    {
                        var documentType = (DocumentationTypes)documentTypeValue;
                        var url          = selfDocumenting.GetDocumentation(documentType);
                        if (url != null)
                        {
                            analysableInfo.Links.Add(new DocumentationLink
                            {
                                Name = documentType.ToString(),
                                Url  = url.ToString()
                            });
                        }
                    }
                }

                foreach (var availableStatistic in analysable.AvailableStatistics)
                {
                    var statisticInfo = new StatisticInfo
                    {
                        Name        = availableStatistic.Name,
                        Description = availableStatistic.Description,
                        Units       = availableStatistic.Units,
                        Statistic   = analysable.GetStatistic(availableStatistic.Id)
                    };
                    analysableInfo.Statistics.Add(statisticInfo);
                }

                if (analysableInfo.Statistics.Count > 0)
                {
                    stats.Add(analysableInfo);
                }
            }

            var router = middleware as IRouter;

            if (router != null)
            {
                AddStats(stats, router, analysedMiddleware);
            }
        }
 public void AddInstance <TParam>(IMiddleware <TParam> middleware)
 {
     singletones.Add(middleware.GetType(), middleware);
 }