/// <summary>
        /// Adds JustSaying services to the registry.
        /// </summary>
        /// <param name="registry">The <see cref="ConfigurationExpression"/> to add JustSaying services to.</param>
        /// <param name="configure">A delegate to a method to use to configure JustSaying.</param>
        /// <exception cref="ArgumentNullException">
        /// <paramref name="registry"/> or <paramref name="configure"/> is <see langword="null"/>.
        /// </exception>
        public static void AddJustSaying(this ConfigurationExpression registry, Action <MessagingBusBuilder, IContext> configure)
        {
            if (registry == null)
            {
                throw new ArgumentNullException(nameof(registry));
            }

            if (configure == null)
            {
                throw new ArgumentNullException(nameof(configure));
            }

            registry.AddRegistry <JustSayingRegistry>();

            registry
            .For <MessagingBusBuilder>()
            .Singleton()
            .Use(
                nameof(MessagingBusBuilder),
                (context) =>
            {
                var builder = new MessagingBusBuilder()
                              .WithServiceResolver(new ContextResolver(context));

                configure(builder, context);

                var contributors = context.GetAllInstances <IMessageBusConfigurationContributor>();

                foreach (var contributor in contributors)
                {
                    contributor.Configure(builder);
                }

                return(builder);
            });

            registry
            .For <IMessagePublisher>()
            .Singleton()
            .Use(
                nameof(IMessagePublisher),
                (context) =>
            {
                var builder = context.GetInstance <MessagingBusBuilder>();
                return(builder.BuildPublisher());
            });

            registry
            .For <IMessagingBus>()
            .Singleton()
            .Use(
                nameof(IMessagingBus),
                (context) =>
            {
                var builder = context.GetInstance <MessagingBusBuilder>();
                return(builder.BuildSubscribers());
            });
        }
 /// <summary>
 /// Populates the container using the specified service descriptors.
 /// </summary>
 /// <param name="config">The configuration.</param>
 /// <param name="descriptors">The service descriptors.</param>
 public static void Populate(this ConfigurationExpression config, IEnumerable <ServiceDescriptor> descriptors)
 {
     config.Policies.ConstructorSelector <AspNetConstructorSelector>();
     config.AddRegistry(new ServiceCollectionRegistry(descriptors));
 }