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); } } }
/// <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); }
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()); }
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); }
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); }
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]; } }
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); } }
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); } }
private static bool IsMiddleware(IMiddleware x) { return(!x.GetType().ImplementsInterface <IPreMiddleware>() && !x.GetType().ImplementsInterface <ISystemMiddleware>()); }
private static bool IsPreMiddleware(IMiddleware x) { return(x.GetType().ImplementsInterface <IPreMiddleware>()); }
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); }