public void Describe(DescribeSortCriterionContext describe)
        {
            var builder = new BindingBuilder();

            foreach (var bindingProvider in _bindingProviders)
            {
                bindingProvider.GetMemberBindings(builder);
            }

            var groupedMembers = builder.Build().GroupBy(b => b.Property.DeclaringType).ToDictionary(b => b.Key, b => b);

            foreach (var typeMembers in groupedMembers.Keys)
            {
                var descriptor = describe.For(typeMembers.Name, new LocalizedString(typeMembers.Name.CamelFriendly()), T("Members for {0}", typeMembers.Name));
                foreach (var member in groupedMembers[typeMembers])
                {
                    var closureMember = member;
                    descriptor.Element(member.Property.Name, member.DisplayName, member.Description,
                                       context => ApplyFilter(context, closureMember.Property),
                                       context => DisplaySortCriterion(context, closureMember.DisplayName.Text),
                                       SortCriterionFormProvider.FormName
                                       );
                }
            }
        }
Пример #2
0
        /// <inheritdoc/>
        public IBindingCollection DiscoverAndSetupBindings()
        {
            _logger.Trace("Discover and setup bindings");
            var bindingCollections = new ConcurrentBag <IBindingCollection>();

            var allTypes = _typeFinder.All;

            _logger.Trace("Find all binding conventions");
            var conventionTypes = _typeFinder.FindMultiple <IBindingConvention>();

            _scheduler.PerformForEach(conventionTypes, (Action <Type>)(conventionType =>
            {
                _logger.Trace((string)$"Handle convention type {conventionType.AssemblyQualifiedName}");

                var convention        = _bootContainer.Get(conventionType) as IBindingConvention;
                var servicesToResolve = allTypes.Where(service => convention.CanResolve(service));

                var bindings = new ConcurrentBag <Binding>();

                _scheduler.PerformForEach(servicesToResolve, service =>
                {
                    var bindingBuilder = new BindingBuilder(Binding.For(service));
                    convention.Resolve(service, bindingBuilder);
                    bindings.Add(bindingBuilder.Build());
                });

                var bindingCollection = new BindingCollection(bindings);
                bindingCollections.Add(bindingCollection);
            }));

            var aggregatedBindingCollection = new BindingCollection(bindingCollections.ToArray());

            return(aggregatedBindingCollection);
        }
Пример #3
0
        static Binding Bind(Type type, object target)
        {
            var containerBindingBuilder = new BindingBuilder(Binding.For(type));
            var scope = containerBindingBuilder.To(target);

            scope.Singleton();
            return(containerBindingBuilder.Build());
        }
Пример #4
0
        /// <summary>
        /// Bind using a builder for fluent configuration
        /// </summary>
        /// <param name="container">container to act on</param>
        /// <param name="builderAction">configuration handler</param>
        /// <typeparam name="TFrom">Type to bind from</typeparam>
        /// <typeparam name="TTo">Type to bind to</typeparam>
        public static void Bind <TFrom, TTo>(this IDependencyContainer container, Action <BindingBuilder> builderAction) where TTo : TFrom
        {
            var builder = new BindingBuilder();

            builderAction(builder);
            var config = builder.Build();

            container.Bind <TFrom, TTo>(config);
        }
Пример #5
0
        /// <summary>
        /// Bind using a builder for fluent configuration
        /// </summary>
        /// <param name="container">container to act on</param>
        /// <param name="builderAction">configuration handler</param>
        /// <typeparam name="T">Type to bind to</typeparam>
        public static void Bind <T>(this IDependencyContainer container, Action <BindingBuilder <T> > builderAction)
        {
            var builder = new BindingBuilder <T>();

            builderAction(builder);
            var config = builder.Build();

            container.Bind <T>(config);
        }
Пример #6
0
        protected override BindingConfiguration ConfigureBindings(BindingBuilder builder)
        {
            ConfigureLikeBindings(builder);
            ConfigureCommentBindings(builder);
            ConfigureGroupBindings(builder);
            ConfigureMediaBindings(builder);


            return(builder.Build());
        }
Пример #7
0
        static Binding Bind(Type type, Func <object> target, bool singleton = false)
        {
            var containerBindingBuilder = new BindingBuilder(Binding.For(type));
            var scope = containerBindingBuilder.To(target);

            if (singleton)
            {
                scope.Singleton();
            }
            return(containerBindingBuilder.Build());
        }
Пример #8
0
        public static void Bind <TType>(this IDependencyContainer container, Action <BindingBuilder <TType> > configurator)
        {
            if (null == container)
            {
                throw new ArgumentNullException(nameof(container));
            }

            var builder = new BindingBuilder <TType>();

            configurator.Invoke(builder);
            container.Bind <TType>(builder.Build());
        }
Пример #9
0
        protected override BindingConfiguration ConfigureBindings(BindingBuilder builder)
        {
            ConfigureLikeBindings(builder);
            ConfigureCommentBindings(builder);
            ConfigureGroupBindings(builder);
            ConfigureMediaBindings(builder);


            builder.HandleCommand <MentionCommand>()
            .WithHandle <MentionHandle>();

            return(builder.Build());
        }
Пример #10
0
 private Dictionary <Type, IGrouping <Type, BindingItem> > GetMemberGroups()
 {
     if (_groupsDictionary == null)
     {
         // use MemberBinding to get the Record
         var builder = new BindingBuilder();
         foreach (var bindingProvider in _bindingProviders)
         {
             bindingProvider.GetMemberBindings(builder);
         }
         _groupsDictionary = builder.Build()
                             .GroupBy(b => b.Property.DeclaringType)
                             .ToDictionary(b => b.Key, b => b);
     }
     return(_groupsDictionary);
 }
Пример #11
0
        public override void Build(BuildContext context)
        {
            var memberBindings = new XElement("MemberBindings");

            context.RecipeDocument.Element("Orchard").Add(memberBindings);

            var bindingBuilder = new BindingBuilder();

            _memberBindingProvider.GetMemberBindings(bindingBuilder);

            foreach (var bindingItem in bindingBuilder.Build())
            {
                var declaringType = bindingItem.Property.DeclaringType;

                var memberBinding = new XElement("MemberBinding",
                                                 new XAttribute("Type", declaringType.FullName),
                                                 new XAttribute("Member", bindingItem.Property.Name),
                                                 new XAttribute("Description", bindingItem.Description),
                                                 new XAttribute("DisplayName", bindingItem.DisplayName));

                memberBindings.Add(memberBinding);
            }
        }
        void HandleConvention(
            Type conventionType,
            IEnumerable <Type> allTypes,
            ConcurrentBag <IBindingCollection> bindingCollections)
        {
            _logger.Trace("Handle convention type {conventionType}", conventionType.AssemblyQualifiedName);

            var convention        = _bootContainer.Get(conventionType) as IBindingConvention;
            var servicesToResolve = allTypes.Where(service => convention.CanResolve(service));

            var bindings = new ConcurrentBag <Binding>();

            _scheduler.PerformForEach(servicesToResolve, service =>
            {
                var bindingBuilder = new BindingBuilder(Binding.For(service));
                convention.Resolve(service, bindingBuilder);
                bindings.Add(bindingBuilder.Build());
            });

            var bindingCollection = new BindingCollection(bindings);

            bindingCollections.Add(bindingCollection);
        }