public UploadPolicyResponse UploadFullPolicy(UpLoadPolicyRequest request) { OnWoking(this, new EventMsg { Status = RunStatus.Normal, PurchaserType = PolicyService.Enums.PurchaserType.Qunar, Msg = "------------------------------Start------------------------------------" }); ShowMsg(this, new EventMsg() { Status = RunStatus.Normal, PurchaserType = PurchaserType.Qunar, Msg = DateTime.Now + ":开始上传政策" }); IHandlerBuilder builder = new HandlerBuilder(); builder.Use <QunarLoadFullPolicyMiddleware>() //载入全量政策中间件 .Use <QunarFilterSplitMiddleware>() //过滤并拆分中间件 .Use <QunarFullDispatcherMiddleware>() //全量分发政策中间件 .Use <QunarFormatMiddleware>() //先格式化成去哪儿格式并保存xml文件 .Use <PackageZipFileMiddleware>() //压缩成zip文件 .Use <QunarUploadMiddleware>(); //上传到去哪儿服务器 IHandlerContext context = new HandlerContext(request); IHandler handler = new DefaultHandler(builder, ShowMsg); handler.Execute(context); OnWoking(this, new EventMsg { Status = RunStatus.Normal, PurchaserType = PolicyService.Enums.PurchaserType.Qunar, Msg = "-------------------------------End---------------------------------------" }); return(context.UploadResponse); }
public ActionResult Index() { IHandlerBuilder builder = new HandlerBuilder(); builder .Use <SignatureCheckHandlerMiddleware>() //验证签名中间件。 .Use <CreateRequestMessageHandlerMiddleware>() //创建消息中间件(内置消息解密逻辑)。 .Use <SessionSupportHandlerMiddleware>() //会话支持中间件。 .Use <IgnoreRepeatMessageHandlerMiddleware>() //忽略重复的消息中间件。 .Use <TestMessageHandlerMiddleware>() //测试消息处理中间件。 .Use <GenerateResponseXmlHandlerMiddleware>(); //生成相应XML处理中间件(内置消息加密逻辑)。 // .Use<AgentHandlerMiddleware>(new AgentRequestModel(new Uri("http://localhost:22479/Mutual"))); var context = new HandlerContext(Request); //设置基本信息。 context .SetMessageHandlerBaseInfo(new MessageHandlerBaseInfo( "wxa4ab3e636e2eb702", "q0OlAOdGzpmm5B8HEqycylcn17nUp25HG04dr7KD6ET", "weixin")); IWeiXinHandler weiXinHandler = new DefaultWeiXinHandler(builder); weiXinHandler.Execute(context); return(new WeiXinResult(context)); }
public ActionResult Index() { IHandlerBuilder builder = new HandlerBuilder(); builder .Use <SignatureCheckHandlerMiddleware>() //验证签名中间件。 .Use <CreateRequestMessageHandlerMiddleware>() //创建消息中间件(内置消息解密逻辑)。 .Use <SessionSupportHandlerMiddleware>() //会话支持中间件。 .Use <IgnoreRepeatMessageHandlerMiddleware>() //忽略重复的消息中间件。 .Use <TestMessageHandlerMiddleware>() //测试消息处理中间件。 .Use <GenerateResponseXmlHandlerMiddleware>(); //生成相应XML处理中间件(内置消息加密逻辑)。 // .Use<AgentHandlerMiddleware>(new AgentRequestModel(new Uri("http://localhost:22479/Mutual"))); string content; using (var reader = new StreamReader(Request.Body, Encoding.UTF8)) { content = reader.ReadToEnd(); } var context = new HandlerContext(content); //设置基本信息。 context .SetMessageHandlerBaseInfo(new MessageHandlerBaseInfo( _weChatConfig.AppId, _weChatConfig.EncodingAesKey, _weChatConfig.Token)); IWeiXinHandler weiXinHandler = new DefaultWeiXinHandler(builder); weiXinHandler.Execute(context); return(new WeiXinResult(context)); }
private TimeRadioTask CreateInitialStateTask() { HandlerBuilder builder = new HandlerBuilder(radio); //base bulding for (int i = 0; i < 4; i++) { builder.BuildStep().FrequencyClamp(i, ClampState.Fixed); } builder.BuildStep().AntenaClamp(ClampState.Fixed); builder.BuildStep().Noise(generator.Noise); builder.BuildStep().Volume(generator.Volume); builder.BuildStep().Voltage(VoltageState.Broadcast1); builder.BuildStep().WorkMode(WorkModeState.Simplex); builder.BuildStep().Display(Turned.Off); builder.BuildStep().Power(Turned.Off); builder.BuildStep().FixedRangeStateSpecialized(); builder.BuildStep().SubrangeSwitcherSpecialized(); //end building //необходимо поменять на описание самого задания return(new TimeRadioTask(builder.Handler, false) { Description = "Установите органы управления в начальное положение." }); }
public async Task <ActionResult> Index() { IHandlerBuilder builder = new HandlerBuilder(); builder #if !DEBUG .Use <SignatureCheckHandlerMiddleware>() //验证签名中间件。 #endif .Use <CreateRequestMessageHandlerMiddleware>() //创建消息中间件(内置消息解密逻辑)。 .Use <SessionSupportHandlerMiddleware>() //会话支持中间件。 .Use <IgnoreRepeatMessageHandlerMiddleware>() //忽略重复的消息中间件。 .Use <CommandMessageHandlerMiddleware>() //每日精华文章消息处理中间件。 .Use <GenerateResponseXmlHandlerMiddleware>(); //生成相应XML处理中间件(内置消息加密逻辑)。 // .Use<AgentHandlerMiddleware>(new AgentRequestModel(new Uri("http://localhost:22479/Mutual"))); var context = new HandlerContext(Request); //设置基本信息。 context .SetMessageHandlerBaseInfo(new MessageHandlerBaseInfo( ConfigurationManager.AppSettings["wx:AppId"], ConfigurationManager.AppSettings["wx:AppSecret"], "weixin")); IWeiXinHandler weiXinHandler = new DefaultWeiXinHandler(builder); await weiXinHandler.Execute(context); return(new WeiXinResult(context)); }
public RepeatPatternTests() { _builder = Handle .Required <Scalar>() .Required <IRepeater>() .Optional <SeparatorComma>(); }
public async Task<ActionResult> Index() { IHandlerBuilder builder = new HandlerBuilder(); builder #if !DEBUG .Use<SignatureCheckHandlerMiddleware>() //验证签名中间件。 #endif .Use<CreateRequestMessageHandlerMiddleware>() //创建消息中间件(内置消息解密逻辑)。 .Use<SessionSupportHandlerMiddleware>() //会话支持中间件。 .Use<IgnoreRepeatMessageHandlerMiddleware>() //忽略重复的消息中间件。 .Use<CommandMessageHandlerMiddleware>() //每日精华文章消息处理中间件。 .Use<GenerateResponseXmlHandlerMiddleware>(); //生成相应XML处理中间件(内置消息加密逻辑)。 // .Use<AgentHandlerMiddleware>(new AgentRequestModel(new Uri("http://localhost:22479/Mutual"))); var context = new HandlerContext(Request); //设置基本信息。 context .SetMessageHandlerBaseInfo(new MessageHandlerBaseInfo( ConfigurationManager.AppSettings["wx:AppId"], ConfigurationManager.AppSettings["wx:AppSecret"], "weixin")); IWeiXinHandler weiXinHandler = new DefaultWeiXinHandler(builder); await weiXinHandler.Execute(context); return new WeiXinResult(context); }
public void When_RequestExpired_Then_OnMessageExpiredIsCalled() { // arrange var onMessageExpiredMock = new Mock <Action <IMessageBus, AbstractConsumerSettings, object> >(); var consumerSettings = new HandlerBuilder <SomeRequest, SomeResponse>(new MessageBusSettings()).Topic(null).WithHandler <IRequestHandler <SomeRequest, SomeResponse> >().Instances(1).ConsumerSettings; consumerSettings.OnMessageExpired = onMessageExpiredMock.Object; var p = new ConsumerInstancePoolMessageProcessor <SomeRequest>(consumerSettings, _busMock.Bus, x => Array.Empty <byte>()); var request = new SomeRequest(); var requestMessage = new MessageWithHeaders(); requestMessage.SetHeader(ReqRespMessageHeaders.Expires, _busMock.CurrentTime.AddSeconds(-10)); _busMock.BusMock.Setup(x => x.DeserializeRequest(typeof(SomeRequest), It.IsAny <byte[]>(), out requestMessage)) .Returns(request); // act p.ProcessMessage(request).Wait(); // assert _busMock.HandlerMock.Verify(x => x.OnHandle(It.IsAny <SomeRequest>(), It.IsAny <string>()), Times.Never); // the handler should not be called onMessageExpiredMock.Verify(x => x(_busMock.Bus, consumerSettings, request), Times.Once); // callback called once }
public ActionResult Index() { IHandlerBuilder builder = new HandlerBuilder(); builder .Use<SignatureCheckHandlerMiddleware>() //验证签名中间件。 .Use<CreateRequestMessageHandlerMiddleware>() //创建消息中间件(内置消息解密逻辑)。 .Use<SessionSupportHandlerMiddleware>() //会话支持中间件。 .Use<IgnoreRepeatMessageHandlerMiddleware>() //忽略重复的消息中间件。 .Use<TestMessageHandlerMiddleware>() //测试消息处理中间件。 .Use<GenerateResponseXmlHandlerMiddleware>(); //生成相应XML处理中间件(内置消息加密逻辑)。 // .Use<AgentHandlerMiddleware>(new AgentRequestModel(new Uri("http://localhost:22479/Mutual"))); var context = new HandlerContext(Request); //设置基本信息。 context .SetMessageHandlerBaseInfo(new MessageHandlerBaseInfo( "wxa4ab3e636e2eb702", "q0OlAOdGzpmm5B8HEqycylcn17nUp25HG04dr7KD6ET", "weixin")); IWeiXinHandler weiXinHandler = new DefaultWeiXinHandler(builder); weiXinHandler.Execute(context); return new WeiXinResult(context); }
public RepeatPatternTests() { _builder = Handle .Required<Scalar>() .Required<IRepeater>() .Optional<SeparatorComma>(); }
/// <summary> /// Configures NetSel handler builder. /// </summary> /// <param name="configuration">Instance of PageFactoryConfiguration.</param> /// <returns>Page factory configuration.</returns> public static PageFactoryConfiguration ConfigureNetSelHandlerBuilder(this PageFactoryConfiguration configuration) { var handlerBuilder = new HandlerBuilder(); handlerBuilder.RegisterNetSelHandlerTypes(); configuration.HandlerBuilder = handlerBuilder; return(configuration); }
public RepeatPatternTests() { _builder = Handle .Required <Scalar>() .Required <IRepeater>() .Optional <SeparatorComma>(); Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en"); }
public async Task IfRequestIsInvalid_ShouldReturnErrors() { var handler = new HandlerBuilder() .WithRequestInvalid() .Build(); var errors = await handler.Handle(new PayWithDebitRequest()); errors.Should().NotBeEmpty(); }
public void When_NewInstance_Then_DoesNotResolveHandlerInstances() { // arrange var consumerSettings = new HandlerBuilder <SomeRequest, SomeResponse>(new MessageBusSettings()).Topic(null).WithHandler <IRequestHandler <SomeRequest, SomeResponse> >().Instances(2).ConsumerSettings; // act var p = new ConsumerInstancePoolMessageProcessor <SomeRequest>(consumerSettings, _busMock.Bus, x => Array.Empty <byte>()); // assert _busMock.DependencyResolverMock.Verify(x => x.Resolve(typeof(IRequestHandler <SomeRequest, SomeResponse>)), Times.Never); }
/// <summary> /// Starts to build a handler pipeline for the specified message type. /// </summary> /// <typeparam name="TMessage">The type of the message the pipeline will handle.</typeparam> /// <returns>A a handler builder to continue defining the pipeline.</returns> public IHandlerBuilder <TMessage> For <TMessage>() { var key = typeof(TMessage); List <NonGenericHandler> handlers = _handlersByMessageType.ContainsKey(key) ? _handlersByMessageType[key] : new List <NonGenericHandler>(); var handlerBuilder = new HandlerBuilder <TMessage>(this); handlers.Add((message, ct) => handlerBuilder.Invoke((TMessage)message, ct)); _handlersByMessageType[key] = handlers; return(handlerBuilder); }
public async Task IfClientDoesNotHaveSufficienteBalance_ShouldReturnErrors() { var request = new PayWithDebitRequest { ClientId = 10, Value = 5 }; var handler = new HandlerBuilder() .WithRequestValid() .WithInsufficientBalance(request.ClientId, request.Value) .Build(); var errors = await handler.Handle(request); errors.Should().NotBeEmpty(); }
public async Task IfDailyEntryServiceFails_ShouldReturnErrors() { var request = new PayWithDebitRequest { ClientId = 10, Value = 5 }; var handler = new HandlerBuilder() .WithRequestValid() .WithSufficientBalance(request.ClientId, request.Value) .WithDailyEntryServiceFailing(request.ClientId, request.Value) .Build(); var errors = await handler.Handle(request); errors.Should().NotBeEmpty(); }
public async Task IfRecurrentPaymentWasSaveWithSuccessfully_ShouldNotReturnErrors() { var request = new PayWithDebitRequest { ClientId = 10, Value = 5 }; var(handler, mockAssertions) = new HandlerBuilder() .WithRequestValid() .WithSufficientBalance(request.ClientId, request.Value) .BuildWithMock(); var errors = await handler.Handle(request); errors.Should().BeEmpty(); mockAssertions .ShouldCallRepository(); }
public Task Register <TCommand>(Func <HandlerBuilder, CommandHandler <TCommand> > func) where TCommand : IntegrationMessage { _activator.Handle <TCommand>(async c => { var builder = new HandlerBuilder(_getUow); var handler = func(builder); try { await handler.Process(c); } catch (Exception) { handler.Uow.Rollback(); } }); return(Task.CompletedTask); }
private TimeRadioTask CreateFrequencyTask(FrequencyParameter parameter = null) { HandlerBuilder builder = new HandlerBuilder(radio); //base bulding builder.BuildStep().WorkMode(generator.WorkMode); builder.BuildStep().Noise(generator.Noise); builder.BuildStep().Voltage(VoltageState.Broadcast1); builder.BuildStep().Power(generator.Power); builder.BuildStep().Display(generator.Display); builder.BuildStep().Volume(generator.Volume); builder.BuildStep().Frequency((parameter != null)?parameter.Frequency:InfoGenerator.Frequency).EscapeNext(TypeRadioAction.Antena); builder.BuildStep().Antena(generator.Antena); //end building return(new TimeRadioTask(builder.Handler) { Description = builder.Handler.Steps.Where(x => x.Type == TypeRadioAction.SetFreqyency).First().ToString() }); }
private TimeRadioTask CreateFixFrequencyTask(FixFrequencyParameter parameter = null) { HandlerBuilder builder = new HandlerBuilder(radio); var fixedFrequency = (parameter == null)?generator.FixFrequency:parameter; //base bulding builder.BuildStep().WorkMode(generator.WorkMode); builder.BuildStep().Noise(generator.Noise); builder.BuildStep().Voltage(VoltageState.Broadcast1); builder.BuildStep().Display(generator.Display); builder.BuildStep().Power(generator.Power); builder.BuildStep().Volume(generator.Volume); builder.BuildStep().FixFrequency(fixedFrequency); builder.BuildStep().FixAntenna(fixedFrequency.Range, fixedFrequency.SubFrequency); //end building return(new TimeRadioTask(builder.Handler) { Description = builder.Handler.Steps.Where(x => x.Type == TypeRadioAction.SetFixFrequency).First().ToString() }); }
public async Task Invoke(HttpContext context, RequestDelegate next) { string[] segments; var route = SelectRoute(context, out segments); if (route == null) { await next(context); } else { context.Response.StatusCode = 200; context.SetSegments(segments); try { if (route.Handler == null) { lock (route) { if (route.Handler == null) { route.Handler = HandlerBuilder.Build(route.Chain); } } } await route.Handler.Handle(context); } catch (Exception e) { context.RequestServices.GetService <ILogger <HttpContext> >().LogError(new EventId(500), e, "Request Failed"); context.Response.StatusCode = 500; await context.Response.WriteAsync(e.ToString()); } } }
public void BuildsProperSettings() { // arrange var topic = "topic"; var settings = new MessageBusSettings(); // act var subject = new HandlerBuilder <SomeRequest, SomeResponse>(settings) .Topic(topic) .Instances(3) .WithHandler <SomeRequestMessageHandler>(); // assert subject.ConsumerSettings.MessageType.Should().Be(typeof(SomeRequest)); subject.MessageType.Should().Be(typeof(SomeRequest)); subject.Topic.Should().Be(topic); subject.ConsumerSettings.Topic.Should().Be(topic); subject.ConsumerSettings.Instances.Should().Be(3); subject.ConsumerSettings.ConsumerType.Should().Be(typeof(SomeRequestMessageHandler)); subject.ConsumerSettings.ConsumerMode.Should().Be(ConsumerMode.RequestResponse); subject.ConsumerSettings.IsRequestMessage.Should().BeTrue(); subject.ConsumerSettings.ResponseType.Should().Be(typeof(SomeResponse)); }
public UploadPolicyResponse UpLoadIncrementPolicy(UpLoadPolicyRequest request, bool isTaskPolicy = true) { OnWoking(this, new EventMsg { Status = RunStatus.Normal, PurchaserType = PolicyService.Enums.PurchaserType.Qunar, Msg = "------------------------------Start------------------------------------" }); QunarUploadPolicyRequest qunarIncrementRequest = CoreHelper.ChangeToChild <UpLoadPolicyRequest, QunarUploadPolicyRequest>(request); IHandlerBuilder builder = new HandlerBuilder(); if (isTaskPolicy == true) { builder.Use <QunarLoadIncrementalPolicyMiddleware>() //载入增量政策 .Use <QunarFilterSplitMiddleware>() //过滤并拆分中间件 .Use <QunarIncrementalDispatcherMiddleware>() //增量分发政策中间件 .Use <QunarFormatMiddleware>() //先格式化成去哪儿格式并保存xml文件 .Use <PackageZipFileMiddleware>() //压缩成zip文件 .Use <QunarUploadMiddleware>(); //上传到去哪儿服务器 } else//有现成的数据 { builder.Use <QunarFilterRepeatUploadMiddleware>() //过滤不在上传列表的政策中间件 .Use <QunarFilterSplitMiddleware>() //过滤并拆分中间件 .Use <QunarIncrementalDispatcherMiddleware>() //增量分发政策中间件 .Use <QunarFormatMiddleware>() //先格式化成去哪儿格式并保存xml文件 .Use <PackageZipFileMiddleware>() //压缩成zip文件 .Use <QunarUploadMiddleware>(); //上传到去哪儿服务器 } IHandlerContext context = new HandlerContext(request); IHandler handler = new DefaultHandler(builder, ShowMsg); handler.Execute(context); OnWoking(this, new EventMsg { Status = RunStatus.Normal, PurchaserType = PolicyService.Enums.PurchaserType.Qunar, Msg = "-------------------------------End---------------------------------------" }); return(context.UploadResponse); }
public void WhenRequestFailsThenOnMessageFaultIsCalledAndErrorResponseIsSent() { // arrange var onMessageFaultMock = new Mock <Action <IMessageBus, AbstractConsumerSettings, object, Exception> >(); var consumerSettings = new HandlerBuilder <SomeRequest, SomeResponse>(new MessageBusSettings()).Topic(null).WithHandler <IRequestHandler <SomeRequest, SomeResponse> >().Instances(1).ConsumerSettings; consumerSettings.OnMessageFault = onMessageFaultMock.Object; var p = new ConsumerInstancePoolMessageProcessor <SomeRequest>(consumerSettings, _busMock.Bus, x => Array.Empty <byte>()); var request = new SomeRequest(); var requestMessage = new MessageWithHeaders(); var replyTo = "reply-topic"; var requestId = "request-id"; requestMessage.SetHeader(ReqRespMessageHeaders.RequestId, requestId); requestMessage.SetHeader(ReqRespMessageHeaders.ReplyTo, replyTo); _busMock.BusMock.Setup(x => x.DeserializeRequest(typeof(SomeRequest), It.IsAny <byte[]>(), out requestMessage)) .Returns(request); var ex = new Exception("Something went bad"); _busMock.HandlerMock.Setup(x => x.OnHandle(request, consumerSettings.Topic)) .Returns(Task.FromException <SomeResponse>(ex)); // act p.ProcessMessage(request).Wait(); // assert _busMock.HandlerMock.Verify(x => x.OnHandle(request, consumerSettings.Topic), Times.Once); // handler called once onMessageFaultMock.Verify( x => x(_busMock.Bus, consumerSettings, request, ex), Times.Once); // callback called once _busMock.BusMock.Verify( x => x.ProduceResponse(request, requestMessage, It.IsAny <SomeResponse>(), It.Is <MessageWithHeaders>(m => m.Headers[ReqRespMessageHeaders.RequestId] == requestId), It.IsAny <ConsumerSettings>())); }
private TimeRadioTask CreatePrepareTask() { HandlerBuilder builder = new HandlerBuilder(radio); //base bulding builder.BuildStep().WorkMode(generator.WorkMode); builder.BuildStep().Noise(generator.Noise); builder.BuildStep().Voltage(VoltageState.Broadcast1); builder.BuildStep().Display(generator.Display); builder.BuildStep().Power(generator.Power); builder.BuildStep().Volume(generator.Volume); builder.BuildStep().Range(RangeState.FixedFrequency1); builder.BuildStep().FrequencyClamp(0, ClampState.Unfixed); builder.BuildStep().FrequencyClamp(0, ClampState.Fixed).EscapePrew(TypeRadioAction.UnscrewFrequencyClamp); builder.BuildStep().Subrange(0, Turned.On).EscapePrew(TypeRadioAction.UnscrewFrequencyClamp); builder.BuildStep().Antena(generator.Antena).EscapePrew(TypeRadioAction.UnscrewFrequencyClamp); builder.BuildStep().AntenaClamp(ClampState.Fixed).EscapePrew(TypeRadioAction.UnscrewFrequencyClamp); //end building return(new TimeRadioTask(builder.Handler) { Description = "Подготовьте радиостанцию к работе." }); }
/// <summary> /// Configure queue name that incoming requests (<see cref="TRequest"/>) are expected on. /// </summary> /// <param name="builder"></param> /// <param name="queue">Queue name</param> /// <returns></returns> public static TopicHandlerBuilder <TRequest, TResponse> Queue <TRequest, TResponse>(this HandlerBuilder <TRequest, TResponse> builder, string queue) where TRequest : IRequestMessage <TResponse> { var b = new TopicHandlerBuilder <TRequest, TResponse>(queue, builder.Settings); b.ConsumerSettings.SetKind(PathKind.Queue); return(b); }
/// <summary> /// Configure queue name that incoming requests (<see cref="TRequest"/>) are expected on. /// </summary> /// <param name="builder"></param> /// <param name="queue">Queue name</param> /// <returns></returns> public static TopicHandlerBuilder <TRequest, TResponse> Queue <TRequest, TResponse>(this HandlerBuilder <TRequest, TResponse> builder, string queue) where TRequest : IRequestMessage <TResponse> { if (builder is null) { throw new ArgumentNullException(nameof(builder)); } var b = new TopicHandlerBuilder <TRequest, TResponse>(queue, builder.Settings); b.ConsumerSettings.SetKind(PathKind.Queue); return(b); }
public HandlerBuilderTests() { _handlerBuilder = new HandlerBuilder(); }
/// <summary> /// Configure queue name that incoming requests (<see cref="TRequest"/>) are expected on. /// </summary> /// <param name="builder"></param> /// <param name="queue">Queue name</param> /// <param name="queueConfig"></param> /// <returns></returns> public static TopicHandlerBuilder <TRequest, TResponse> Topic <TRequest, TResponse>(this HandlerBuilder <TRequest, TResponse> builder, string queue, Action <TopicHandlerBuilder <TRequest, TResponse> > queueConfig) where TRequest : IRequestMessage <TResponse> { if (builder is null) { throw new ArgumentNullException(nameof(builder)); } if (queueConfig is null) { throw new ArgumentNullException(nameof(queueConfig)); } var b = builder.Queue(queue); queueConfig(b); return(b); }
/// <summary> /// Configure queue name that incoming requests (<see cref="TRequest"/>) are expected on. /// </summary> /// <param name="builder"></param> /// <param name="queue">Queue name</param> /// <param name="queueConfig"></param> /// <returns></returns> public static TopicHandlerBuilder <TRequest, TResponse> Topic <TRequest, TResponse>(this HandlerBuilder <TRequest, TResponse> builder, string queue, Action <TopicHandlerBuilder <TRequest, TResponse> > queueConfig) where TRequest : IRequestMessage <TResponse> { var b = builder.Queue(queue); queueConfig(b); return(b); }