本文整理汇总了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;
}