Skip to content

Commit 628fb9c

Browse files
committed
Refactoring to reuse trigger parameter creation code
1 parent 09f9ffd commit 628fb9c

File tree

2 files changed

+31
-59
lines changed

2 files changed

+31
-59
lines changed

src/WebJobs.Script/Description/CSharp/CSharpFunctionDescriptionProvider.cs

Lines changed: 2 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,8 @@ protected override Collection<ParameterDescriptor> GetFunctionParameters(IFuncti
9999
// Is it the trigger parameter?
100100
if (string.Compare(parameter.Name, triggerMetadata.Name, StringComparison.Ordinal) == 0)
101101
{
102-
descriptors.Add(CreateTriggerParameterDescriptor(parameter, triggerMetadata));
102+
ParameterDescriptor triggerParameter = CreateTriggerParameter(triggerMetadata, parameter.ParameterType);
103+
descriptors.Add(triggerParameter);
103104

104105
if (triggerMetadata.Type == BindingType.HttpTrigger &&
105106
parameter.ParameterType != typeof(HttpRequestMessage))
@@ -166,41 +167,5 @@ protected override Collection<ParameterDescriptor> GetFunctionParameters(IFuncti
166167
// setup the descriptor with the default parameters
167168
return base.GetFunctionParameters(functionInvoker, functionMetadata, triggerMetadata, methodAttributes, inputBindings, outputBindings);
168169
}
169-
170-
private ParameterDescriptor CreateTriggerParameterDescriptor(ParameterInfo parameter, BindingMetadata triggerMetadata)
171-
{
172-
ParameterDescriptor triggerParameter = null;
173-
switch (triggerMetadata.Type)
174-
{
175-
case BindingType.QueueTrigger:
176-
triggerParameter = ParseQueueTrigger((QueueBindingMetadata)triggerMetadata, parameter.ParameterType);
177-
break;
178-
case BindingType.EventHubTrigger:
179-
triggerParameter = ParseEventHubTrigger((EventHubBindingMetadata)triggerMetadata, parameter.ParameterType);
180-
break;
181-
case BindingType.BlobTrigger:
182-
triggerParameter = ParseBlobTrigger((BlobBindingMetadata)triggerMetadata, parameter.ParameterType);
183-
break;
184-
case BindingType.ServiceBusTrigger:
185-
triggerParameter = ParseServiceBusTrigger((ServiceBusBindingMetadata)triggerMetadata, parameter.ParameterType);
186-
break;
187-
case BindingType.TimerTrigger:
188-
triggerParameter = ParseTimerTrigger((TimerBindingMetadata)triggerMetadata, parameter.ParameterType);
189-
break;
190-
case BindingType.HttpTrigger:
191-
triggerParameter = ParseHttpTrigger((HttpTriggerBindingMetadata)triggerMetadata, parameter.ParameterType);
192-
break;
193-
case BindingType.ManualTrigger:
194-
triggerParameter = ParseManualTrigger(triggerMetadata, parameter.ParameterType);
195-
break;
196-
case BindingType.ApiHubFileTrigger:
197-
triggerParameter = ParseApiHubFileTrigger((ApiHubBindingMetadata)triggerMetadata, parameter.ParameterType);
198-
break;
199-
}
200-
201-
triggerParameter.IsTrigger = true;
202-
203-
return triggerParameter;
204-
}
205170
}
206171
}

src/WebJobs.Script/Description/FunctionDescriptorProvider.cs

Lines changed: 29 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -110,51 +110,58 @@ protected virtual Collection<ParameterDescriptor> GetFunctionParameters(IFunctio
110110
throw new ArgumentNullException("methodAttributes");
111111
}
112112

113+
ApplyMethodLevelAttributes(functionMetadata, triggerMetadata, methodAttributes);
114+
115+
Collection<ParameterDescriptor> parameters = new Collection<ParameterDescriptor>();
116+
ParameterDescriptor triggerParameter = CreateTriggerParameter(triggerMetadata);
117+
parameters.Add(triggerParameter);
118+
119+
// Add a TraceWriter for logging
120+
parameters.Add(new ParameterDescriptor("log", typeof(TraceWriter)));
121+
122+
// Add an IBinder to support the binding programming model
123+
parameters.Add(new ParameterDescriptor("binder", typeof(IBinder)));
124+
125+
// Add ExecutionContext to provide access to InvocationId, etc.
126+
parameters.Add(new ParameterDescriptor("context", typeof(ExecutionContext)));
127+
128+
return parameters;
129+
}
130+
131+
protected virtual ParameterDescriptor CreateTriggerParameter(BindingMetadata triggerMetadata, Type parameterType = null)
132+
{
113133
ParameterDescriptor triggerParameter = null;
114134
switch (triggerMetadata.Type)
115135
{
116136
case BindingType.QueueTrigger:
117-
triggerParameter = ParseQueueTrigger((QueueBindingMetadata)triggerMetadata);
137+
triggerParameter = ParseQueueTrigger((QueueBindingMetadata)triggerMetadata, parameterType ?? typeof(string));
118138
break;
119139
case BindingType.EventHubTrigger:
120-
triggerParameter = ParseEventHubTrigger((EventHubBindingMetadata)triggerMetadata);
140+
triggerParameter = ParseEventHubTrigger((EventHubBindingMetadata)triggerMetadata, parameterType ?? typeof(string));
121141
break;
122142
case BindingType.BlobTrigger:
123-
triggerParameter = ParseBlobTrigger((BlobBindingMetadata)triggerMetadata, typeof(Stream));
143+
triggerParameter = ParseBlobTrigger((BlobBindingMetadata)triggerMetadata, parameterType ?? typeof(Stream));
124144
break;
125145
case BindingType.ServiceBusTrigger:
126-
triggerParameter = ParseServiceBusTrigger((ServiceBusBindingMetadata)triggerMetadata);
146+
triggerParameter = ParseServiceBusTrigger((ServiceBusBindingMetadata)triggerMetadata, parameterType ?? typeof(string));
127147
break;
128148
case BindingType.TimerTrigger:
129-
triggerParameter = ParseTimerTrigger((TimerBindingMetadata)triggerMetadata, typeof(TimerInfo));
149+
triggerParameter = ParseTimerTrigger((TimerBindingMetadata)triggerMetadata, parameterType ?? typeof(TimerInfo));
130150
break;
131151
case BindingType.HttpTrigger:
132-
triggerParameter = ParseHttpTrigger((HttpTriggerBindingMetadata)triggerMetadata, typeof(HttpRequestMessage));
152+
triggerParameter = ParseHttpTrigger((HttpTriggerBindingMetadata)triggerMetadata, parameterType ?? typeof(HttpRequestMessage));
133153
break;
134154
case BindingType.ManualTrigger:
135-
triggerParameter = ParseManualTrigger(triggerMetadata);
155+
triggerParameter = ParseManualTrigger(triggerMetadata, parameterType ?? typeof(string));
136156
break;
137157
case BindingType.ApiHubFileTrigger:
138-
triggerParameter = ParseApiHubFileTrigger((ApiHubBindingMetadata)triggerMetadata, typeof(Stream));
158+
triggerParameter = ParseApiHubFileTrigger((ApiHubBindingMetadata)triggerMetadata, parameterType ?? typeof(Stream));
139159
break;
140160
}
141161

142-
ApplyMethodLevelAttributes(functionMetadata, triggerMetadata, methodAttributes);
143-
144-
Collection<ParameterDescriptor> parameters = new Collection<ParameterDescriptor>();
145162
triggerParameter.IsTrigger = true;
146-
parameters.Add(triggerParameter);
147-
148-
// Add a TraceWriter for logging
149-
parameters.Add(new ParameterDescriptor("log", typeof(TraceWriter)));
150-
151-
// Add an IBinder to support the binding programming model
152-
parameters.Add(new ParameterDescriptor("binder", typeof(IBinder)));
153163

154-
// Add ExecutionContext to provide access to InvocationId, etc.
155-
parameters.Add(new ParameterDescriptor("context", typeof(ExecutionContext)));
156-
157-
return parameters;
164+
return triggerParameter;
158165
}
159166

160167
protected static void ApplyMethodLevelAttributes(FunctionMetadata functionMetadata, BindingMetadata triggerMetadata, Collection<CustomAttributeBuilder> methodAttributes)

0 commit comments

Comments
 (0)