public static void UseBreadcrumbs(this IServiceCollection services, Assembly assembly, Action <BreadcrumbOptions> optionsSetter) { var options = new BreadcrumbOptions(); optionsSetter.Invoke(options); UseBreadcrumbs(services, assembly, options); }
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>(); }