/// <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)); }