/// <summary> /// Configure a service instance, which supports one or more receive endpoints, all of which are managed by conductor. /// </summary> /// <param name="configurator"></param> /// <param name="options"></param> /// <param name="configure"></param> public static void ServiceInstance <TEndpointConfigurator>(this IBusFactoryConfigurator <TEndpointConfigurator> configurator, ServiceInstanceOptions options, Action <IServiceInstanceConfigurator <TEndpointConfigurator> > configure) where TEndpointConfigurator : IReceiveEndpointConfigurator { IServiceInstanceTransportConfigurator <TEndpointConfigurator> transportConfigurator = Cached <TEndpointConfigurator> .Instance; var instance = new ServiceInstance(); if (options.InstanceEndpointEnabled) { var definition = new InstanceEndpointDefinition(instance); configurator.ReceiveEndpoint(definition, options.EndpointNameFormatter, instanceEndpointConfigurator => { var instanceConfigurator = new ServiceInstanceConfigurator <TEndpointConfigurator>(configurator, transportConfigurator, instance, options, instanceEndpointConfigurator); configure?.Invoke(instanceConfigurator); }); } else { var instanceConfigurator = new ServiceInstanceConfigurator <TEndpointConfigurator>(configurator, transportConfigurator, instance, options); configure?.Invoke(instanceConfigurator); } }
public ServiceInstanceConfigurator(IBusFactoryConfigurator <TEndpointConfigurator> configurator, IServiceInstanceTransportConfigurator <TEndpointConfigurator> transportConfigurator, IServiceInstance instance, ServiceInstanceOptions options, TEndpointConfigurator instanceEndpointConfigurator = default) { _configurator = configurator; _transportConfigurator = transportConfigurator; _instance = instance; _options = options; _instanceEndpointConfigurator = instanceEndpointConfigurator; }