当前位置: 首页>>代码示例>>C#>>正文


C# ComposablePartCatalog.FindExports方法代码示例

本文整理汇总了C#中ComposablePartCatalog.FindExports方法的典型用法代码示例。如果您正苦于以下问题:C# ComposablePartCatalog.FindExports方法的具体用法?C# ComposablePartCatalog.FindExports怎么用?C# ComposablePartCatalog.FindExports使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在ComposablePartCatalog的用法示例。


在下文中一共展示了ComposablePartCatalog.FindExports方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。

示例1: BuildMenu

        private static Navigation[] BuildMenu(ActionExecutedContext filterContext,
                                              ComposablePartCatalog catalog,
                                              out Navigation active)
        {
            active = null;
            List<Navigation> menu = new List<Navigation>();
            foreach (var exportInfo in catalog.FindExports<IControllerMetadata>(ContractNames.AdminController))
            {
                ReflectedControllerDescriptor descriptor = new ReflectedControllerDescriptor(exportInfo.Value);

                var controllerAttr =
                    descriptor.GetCustomAttributes(typeof(AdminControllerAttribute), true).FirstOrDefault()
                    as AdminControllerAttribute;

                if (controllerAttr == null)
                    continue;

                UrlHelper urlHelper = new UrlHelper(filterContext.RequestContext);
                Uri defaultTargetUrl = null;
                List<Navigation> children = new List<Navigation>();
                foreach (var actionDescriptor in descriptor.GetCanonicalActions())
                {
                    var actionAttr =
                        actionDescriptor.GetCustomAttributes(typeof(AdminActionAttribute), true).FirstOrDefault() as
                        AdminActionAttribute;
                    if (actionAttr == null)
                        continue;

                    // TODO replace anon class with concrete type?
                    string targetUrl = urlHelper.Action(actionAttr.Name,
                                                        controllerAttr.Name,
                                                        new
                                                            {
                                                                packageId = exportInfo.Metadata.PackageId,
                                                                packageVersion = exportInfo.Metadata.PackageVersion
                                                            });

                    Uri target = new Uri(targetUrl, UriKind.RelativeOrAbsolute);

                    if (defaultTargetUrl == null || actionAttr.IsDefault)
                        defaultTargetUrl = target;

                    bool isActive = filterContext.ActionDescriptor.ActionName == actionDescriptor.ActionName &&
                                    filterContext.ActionDescriptor.ControllerDescriptor.ControllerType ==
                                    descriptor.ControllerType;

                    Navigation navigation = new Navigation(null,
                                       actionAttr.Order,
                                       actionAttr.Text,
                                       target,
                                       isActive,
                                       Enumerable.Empty<Navigation>());

                    if (isActive)
                        active = navigation;



                    children.Add(navigation);
                }

                bool isAnyChildActive = children.Any(n => n.IsActive);

                // if there's only one child, ignore it
                if (children.Count == 1)
                    children.Clear();

                menu.Add(new Navigation(controllerAttr.Group,
                                        controllerAttr.Order,
                                        controllerAttr.Text,
                                        defaultTargetUrl,
                                        isAnyChildActive,
                                        children));
            }

            var navigations = menu.OrderBy(n => n.Order).ToArray();
            return navigations;
        }
开发者ID:LBiNetherlands,项目名称:LBi.LostDoc,代码行数:78,代码来源:AdminFilter.cs


注:本文中的ComposablePartCatalog.FindExports方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。