public static void UseBreadcrumbs(this IServiceCollection services, Assembly assembly, Action <BreadcrumbOptions> optionsSetter)
        {
            var options = new BreadcrumbOptions();

            optionsSetter.Invoke(options);
            UseBreadcrumbs(services, assembly, options);
        }
Beispiel #2
0
        public void Initialize(Assembly assembly, BreadcrumbOptions options)
        {
            Options = options;
            var controllerType   = typeof(Controller);
            var actionResultType = typeof(IActionResult);
            var taResultType     = typeof(Task <IActionResult>);

            // Extract all the Breadcrumb attributes
            var breadcrumbAttrs = new List <BreadcrumbAttribute>();

            foreach (var type in assembly.GetTypes())
            {
                if (!controllerType.IsAssignableFrom(type))
                {
                    continue;
                }

                string controller = type.Name.Replace("Controller", "");

                foreach (var method in type.GetMethods(BindingFlags.Instance | BindingFlags.Public))
                {
                    if (!actionResultType.IsAssignableFrom(method.ReturnType) && !taResultType.IsAssignableFrom(method.ReturnType))
                    {
                        continue;
                    }

                    var attr = method.GetCustomAttribute <BreadcrumbAttribute>();
                    if (attr == null)
                    {
                        continue;
                    }

                    if (attr.FromAction != null && !attr.FromAction.Contains("."))
                    {
                        if (!string.IsNullOrEmpty(attr.FromController))
                        {
                            attr.FromAction = $"{attr.FromController.Replace("Controller", "")}.{attr.FromAction}";
                        }
                        else
                        {
                            attr.FromAction = $"{controller}.{attr.FromAction}";
                        }
                    }

                    attr.Action = $"{controller}.{method.Name}";
                    breadcrumbAttrs.Add(attr);
                }
            }

            GenerateHierarchy(breadcrumbAttrs);
        }
 public BreadcrumbManager(BreadcrumbOptions options)
 {
     _nodes  = new Dictionary <string, BreadcrumbNode>();
     Options = options;
 }
        private static void UseBreadcrumbs(IServiceCollection services, Assembly assembly, BreadcrumbOptions options)
        {
            var bm = new BreadcrumbsManager();

            bm.Initialize(assembly, options);
            services.AddSingleton(bm);
            services.TryAddScoped <IActionContextAccessor, ActionContextAccessor>();
        }