@@ -19,13 +19,15 @@ private ActivityDefinition(
1919 Type returnType ,
2020 IReadOnlyCollection < Type > parameterTypes ,
2121 int requiredParameterCount ,
22- Func < object ? [ ] , object ? > invoker )
22+ Func < object ? [ ] , object ? > invoker ,
23+ MethodInfo ? methodInfo )
2324 {
2425 Name = name ;
2526 ReturnType = returnType ;
2627 ParameterTypes = parameterTypes ;
2728 RequiredParameterCount = requiredParameterCount ;
2829 this . invoker = invoker ;
30+ MethodInfo = methodInfo ;
2931 }
3032
3133 /// <summary>
@@ -56,6 +58,11 @@ private ActivityDefinition(
5658 /// </summary>
5759 public bool Dynamic => Name == null ;
5860
61+ /// <summary>
62+ /// Gets the <see cref="MethodInfo"/>. Will only have a value if one was used to create this <see cref="ActivityDefinition"/>.
63+ /// </summary>
64+ public MethodInfo ? MethodInfo { get ; private init ; }
65+
5966 /// <summary>
6067 /// Create an activity definition from a delegate. <see cref="Delegate.DynamicInvoke" /> is
6168 /// called on this delegate. The delegate must have an associated method and that method
@@ -89,31 +96,7 @@ public static ActivityDefinition Create(
8996 int requiredParameterCount ,
9097 Func < object ? [ ] , object ? > invoker )
9198 {
92- // If there is a null name, which means dynamic, there must only be one parameter type
93- // and it must be varargs IRawValue
94- if ( name == null && (
95- requiredParameterCount != 1 ||
96- parameterTypes . SingleOrDefault ( ) != typeof ( Converters . IRawValue [ ] ) ) )
97- {
98- throw new ArgumentException (
99- $ "Dynamic activity must accept a required array of IRawValue") ;
100- }
101-
102- if ( requiredParameterCount > parameterTypes . Count )
103- {
104- throw new ArgumentException (
105- $ "Activity { name } has more required parameters than parameters",
106- nameof ( requiredParameterCount ) ) ;
107- }
108- foreach ( var parameterType in parameterTypes )
109- {
110- if ( parameterType . IsByRef )
111- {
112- throw new ArgumentException (
113- $ "Activity { name } has disallowed ref/out parameter") ;
114- }
115- }
116- return new ( name , returnType , parameterTypes , requiredParameterCount , invoker ) ;
99+ return Create ( name , returnType , parameterTypes , requiredParameterCount , invoker , methodInfo : null ) ;
117100 }
118101
119102 /// <summary>
@@ -136,7 +119,8 @@ public static ActivityDefinition Create(MethodInfo method, Func<object?[], objec
136119 method . ReturnType ,
137120 parms . Select ( p => p . ParameterType ) . ToArray ( ) ,
138121 parms . Count ( p => ! p . HasDefaultValue ) ,
139- parameters => invoker . Invoke ( ParametersWithDefaults ( parms , parameters ) ) ) ;
122+ parameters => invoker . Invoke ( ParametersWithDefaults ( parms , parameters ) ) ,
123+ method ) ;
140124 }
141125
142126 /// <summary>
@@ -300,5 +284,40 @@ internal static string NameFromMethodForCall(MethodInfo method)
300284 }
301285 return name ;
302286 }
287+
288+ private static ActivityDefinition Create (
289+ string ? name ,
290+ Type returnType ,
291+ IReadOnlyCollection < Type > parameterTypes ,
292+ int requiredParameterCount ,
293+ Func < object ? [ ] , object ? > invoker ,
294+ MethodInfo ? methodInfo )
295+ {
296+ // If there is a null name, which means dynamic, there must only be one parameter type
297+ // and it must be varargs IRawValue
298+ if ( name == null && (
299+ requiredParameterCount != 1 ||
300+ parameterTypes . SingleOrDefault ( ) != typeof ( Converters . IRawValue [ ] ) ) )
301+ {
302+ throw new ArgumentException (
303+ $ "Dynamic activity must accept a required array of IRawValue") ;
304+ }
305+
306+ if ( requiredParameterCount > parameterTypes . Count )
307+ {
308+ throw new ArgumentException (
309+ $ "Activity { name } has more required parameters than parameters",
310+ nameof ( requiredParameterCount ) ) ;
311+ }
312+ foreach ( var parameterType in parameterTypes )
313+ {
314+ if ( parameterType . IsByRef )
315+ {
316+ throw new ArgumentException (
317+ $ "Activity { name } has disallowed ref/out parameter") ;
318+ }
319+ }
320+ return new ( name , returnType , parameterTypes , requiredParameterCount , invoker , methodInfo ) ;
321+ }
303322 }
304323}
0 commit comments