@@ -16,7 +16,7 @@ public class AddinData
1616 public IList < TypeInfo > _definedClasses = new List < TypeInfo > ( ) ;
1717 private IList < MethodInfo > _definedMethods = new List < MethodInfo > ( ) ;
1818
19- public object CreateClass ( string classTypeString , params object [ ] parameters )
19+ public ClassWrapper CreateClass ( string classTypeString , params object [ ] parameters )
2020 {
2121 var possibleClass = _definedClasses . FirstOrDefault ( c => string . Compare ( c . Name , classTypeString , StringComparison . OrdinalIgnoreCase ) == 0 ) ;
2222
@@ -28,7 +28,7 @@ public class AddinData
2828 return CreateClass ( possibleClass , parameters ) ;
2929 }
3030
31- public object CreateClass ( TypeInfo classType , params object [ ] parameters )
31+ public ClassWrapper CreateClass ( TypeInfo classType , params object [ ] parameters )
3232 {
3333 parameters = parameters ?? new object [ 0 ] ;
3434 var constructors = classType . DeclaredConstructors . Where ( c => c . IsPublic && ! c . IsStatic && c . GetParameters ( ) . Length == parameters . Length ) ;
@@ -51,10 +51,24 @@ public class AddinData
5151 throw new NullReferenceException ( "No valid constructor was found!" ) ;
5252 }
5353
54- return constructor . Invoke ( parameters ?? new object [ 0 ] ) ;
54+ var result = constructor . Invoke ( parameters ?? new object [ 0 ] ) ;
55+
56+ return new ClassWrapper ( result , this ) ;
57+ }
58+
59+ public TType CallStaticMethod < TType > ( string methodName , params object [ ] parameters )
60+ {
61+ var result = CallStaticMethod ( methodName , parameters ) ;
62+
63+ if ( result . GetType ( ) . IsClass )
64+ {
65+ return ( TType ) result . ToActual ( ) ;
66+ }
67+
68+ return ( TType ) result ;
5569 }
5670
57- public object CallStaticMethod ( string methodName , params object [ ] parameters )
71+ public dynamic CallStaticMethod ( string methodName , params object [ ] parameters )
5872 {
5973 parameters = TransformParameters ( parameters ) ;
6074
@@ -78,7 +92,14 @@ public class AddinData
7892 throw new NullReferenceException ( $ "No method with the name '{ methodName } ' was found!") ;
7993 }
8094
81- return method . Invoke ( null , parameters ) ;
95+ var result = method . Invoke ( null , parameters ) ;
96+
97+ if ( result . GetType ( ) . IsClass )
98+ {
99+ return new ClassWrapper ( result , this ) ;
100+ }
101+
102+ return result ;
82103 }
83104
84105 public object [ ] TransformParameters ( params object [ ] parameters )
@@ -112,6 +133,10 @@ public class AddinData
112133 }
113134 }
114135 }
136+ else if ( parameter is ClassWrapper wrapper )
137+ {
138+ value = wrapper . ToActual ( ) ;
139+ }
115140
116141 newParameters . Add ( value ) ;
117142 }
0 commit comments