1111
1212namespace MaxMind . Db
1313{
14- internal readonly struct TypeActivator
14+ internal class TypeActivator
1515 {
1616 internal readonly ObjectActivator Activator ;
17- internal readonly List < ParameterInfo > AlwaysCreatedParameters ;
18- private readonly object ? [ ] _defaultParameters ;
17+ internal readonly ParameterInfo [ ] AlwaysCreatedParameters ;
18+ internal readonly object ? [ ] DefaultParameters ;
1919 internal readonly Dictionary < Key , ParameterInfo > DeserializationParameters ;
20- internal readonly Dictionary < string , ParameterInfo > InjectableParameters ;
21- internal readonly List < ParameterInfo > NetworkParameters ;
20+ internal readonly KeyValuePair < string , ParameterInfo > [ ] InjectableParameters ;
21+ internal readonly ParameterInfo [ ] NetworkParameters ;
2222
2323 internal TypeActivator (
2424 ObjectActivator activator ,
2525 Dictionary < Key , ParameterInfo > deserializationParameters ,
26- Dictionary < string , ParameterInfo > injectables ,
27- List < ParameterInfo > networkParameters ,
28- List < ParameterInfo > alwaysCreatedParameters
29- ) : this ( )
26+ KeyValuePair < string , ParameterInfo > [ ] injectables ,
27+ ParameterInfo [ ] networkParameters ,
28+ ParameterInfo [ ] alwaysCreatedParameters
29+ )
3030 {
3131 Activator = activator ;
3232 AlwaysCreatedParameters = alwaysCreatedParameters ;
@@ -35,11 +35,9 @@ List<ParameterInfo> alwaysCreatedParameters
3535
3636 NetworkParameters = networkParameters ;
3737 Type [ ] parameterTypes = deserializationParameters . Values . OrderBy ( x => x . Position ) . Select ( x => x . ParameterType ) . ToArray ( ) ;
38- _defaultParameters = parameterTypes . Select ( DefaultValue ) . ToArray ( ) ;
38+ DefaultParameters = parameterTypes . Select ( DefaultValue ) . ToArray ( ) ;
3939 }
4040
41- internal object [ ] DefaultParameters ( ) => ( object [ ] ) _defaultParameters . Clone ( ) ;
42-
4341 private static object ? DefaultValue ( Type type )
4442 {
4543 if ( type . GetTypeInfo ( ) . IsValueType && Nullable . GetUnderlyingType ( type ) == null )
@@ -78,15 +76,15 @@ private static TypeActivator ClassActivator(Type expectedType)
7876 var constructor = constructors [ 0 ] ;
7977 var parameters = constructor . GetParameters ( ) ;
8078 var paramNameTypes = new Dictionary < Key , ParameterInfo > ( ) ;
81- var injectables = new Dictionary < string , ParameterInfo > ( ) ;
79+ var injectables = new List < KeyValuePair < string , ParameterInfo > > ( ) ;
8280 var networkParams = new List < ParameterInfo > ( ) ;
8381 var alwaysCreated = new List < ParameterInfo > ( ) ;
8482 foreach ( var param in parameters )
8583 {
8684 var injectableAttribute = param . GetCustomAttributes < InjectAttribute > ( ) . FirstOrDefault ( ) ;
8785 if ( injectableAttribute != null )
8886 {
89- injectables . Add ( injectableAttribute . ParameterName , param ) ;
87+ injectables . Add ( new KeyValuePair < string , ParameterInfo > ( injectableAttribute . ParameterName , param ) ) ;
9088 }
9189 var networkAttribute = param . GetCustomAttributes < NetworkAttribute > ( ) . FirstOrDefault ( ) ;
9290 if ( networkAttribute != null )
@@ -113,7 +111,8 @@ private static TypeActivator ClassActivator(Type expectedType)
113111 paramNameTypes . Add ( new Key ( new ArrayBuffer ( bytes ) , 0 , bytes . Length ) , param ) ;
114112 }
115113 var activator = ReflectionUtil . CreateActivator ( constructor ) ;
116- var clsConstructor = new TypeActivator ( activator , paramNameTypes , injectables , networkParams , alwaysCreated ) ;
114+ var clsConstructor = new TypeActivator ( activator , paramNameTypes , injectables . ToArray ( ) ,
115+ networkParams . ToArray ( ) , alwaysCreated . ToArray ( ) ) ;
117116 return clsConstructor ;
118117 }
119118 }
0 commit comments