public virtual ResourceDescription GetDescription(BehaviorChain chain) { var action = chain.FirstCall(); if (action.HandlerType.HasAttribute <ResourceAttribute>()) { var resource = action.HandlerType.GetCustomAttribute <ResourceAttribute>(); return(new ResourceDescription { Name = resource.Name, Comments = resource.Comments ?? action.HandlerType.Assembly.FindTextResourceNamed(action.HandlerType.FullName) }); } return(_descriptions.GetDescriptions(action.HandlerType.Assembly) .Select(x => new { ResourceHandler = x.GetType().BaseType.GetGenericArguments().FirstOrDefault(), ResourceNamespace = x.GetType().Namespace, Resource = x }) .GroupJoin(_behaviors.GetChains(), x => x.ResourceHandler, x => x.FirstCall().HandlerType, (r, a) => new { r.Resource, r.ResourceHandler, r.ResourceNamespace, Group = a.Any() ? _grouping(a.First().FirstCall()) : null }) .OrderByDescending(x => x.Group) .ThenByDescending(x => x.ResourceNamespace) .Where(x => (x.ResourceHandler != null && _grouping(action).Equals(x.Group)) || (x.ResourceHandler == null && action.HandlerType.Namespace.StartsWith(x.ResourceNamespace))) .Select(x => x.Resource) .FirstOrDefault()); }
public virtual ModuleDescription GetDescription(BehaviorChain chain) { return(_descriptions.GetDescriptions(chain.FirstCall().HandlerType.Assembly) .FirstOrDefault(x => chain.FirstCall().HandlerType.Namespace.StartsWith(x.GetType().Namespace))); }