コード例 #1
0
        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());
        }
コード例 #2
0
 public virtual ModuleDescription GetDescription(BehaviorChain chain)
 {
     return(_descriptions.GetDescriptions(chain.FirstCall().HandlerType.Assembly)
            .FirstOrDefault(x => chain.FirstCall().HandlerType.Namespace.StartsWith(x.GetType().Namespace)));
 }