@@ -19,7 +19,7 @@ public class WhenMappingMemberNameContainingPeriod
1919 public void Property_Name_Containing_Periods_Is_Supported ( )
2020 {
2121 // Create a target type with a property that contains periods
22- Type targetType = new TestTypeBuilder ( )
22+ Type targetType = new TestTypeBuilder ( "Test1" )
2323 . AddProperty < int > ( MemberName )
2424 . CreateType ( ) ;
2525
@@ -53,12 +53,12 @@ static void Test<TTarget>()
5353 public void Constructor_Parameter_Name_Containing_Periods_Is_Supported ( )
5454 {
5555 // Create a target type with a property that contains periods
56- Type targetTypeWithProperty = new TestTypeBuilder ( )
56+ Type targetTypeWithProperty = new TestTypeBuilder ( "Test2" )
5757 . AddProperty < int > ( MemberName )
5858 . CreateType ( ) ;
5959
6060 // Create a target type with a constructor parameter that contains periods
61- Type targetTypeWithConstructor = new TestTypeBuilder ( )
61+ Type targetTypeWithConstructor = new TestTypeBuilder ( "Test3" )
6262 . AddConstructorWithReadOnlyProperty < int > ( MemberName )
6363 . CreateType ( ) ;
6464
@@ -103,7 +103,7 @@ static void Test<TWithProperty, TWithConstructor>()
103103 public void Using_Property_Path_String_Is_Supported ( )
104104 {
105105 // Create a target type with a property that contains periods
106- Type targetType = new TestTypeBuilder ( )
106+ Type targetType = new TestTypeBuilder ( "Test4" )
107107 . AddProperty < int > ( MemberName )
108108 . CreateType ( ) ;
109109
@@ -129,7 +129,7 @@ public void Using_Property_Path_String_Is_Supported()
129129 public void Using_Property_Path_String_Nested_Is_Supported ( )
130130 {
131131 // Create a target type with a property that contains periods
132- Type targetType = new TestTypeBuilder ( )
132+ Type targetType = new TestTypeBuilder ( "Test5" )
133133 . AddProperty < Nested > ( MemberName )
134134 . CreateType ( ) ;
135135
@@ -211,125 +211,125 @@ private class Nested
211211 private class Source
212212 {
213213 public int Value { get ; set ; }
214- }
215-
216- private class TestTypeBuilder
217- {
218- private readonly TypeBuilder _typeBuilder ;
219-
220- public TestTypeBuilder ( )
221- {
222- AssemblyBuilder assemblyBuilder = AssemblyBuilder . DefineDynamicAssembly (
223- new AssemblyName ( "Types" ) ,
224- AssemblyBuilderAccess . Run ) ;
225- ModuleBuilder moduleBuilder = assemblyBuilder . DefineDynamicModule ( "<Module>" ) ;
226- _typeBuilder = moduleBuilder . DefineType (
227- "Types.Target" ,
228- TypeAttributes . Public |
229- TypeAttributes . Class |
230- TypeAttributes . Sealed |
231- TypeAttributes . AutoClass |
232- TypeAttributes . AnsiClass |
233- TypeAttributes . BeforeFieldInit |
234- TypeAttributes . AutoLayout ,
235- null ) ;
236214 }
237215
238- public TestTypeBuilder AddConstructorWithReadOnlyProperty < TParameter > ( string parameterName )
216+ private class TestTypeBuilder
239217 {
240- // Add read-only property
241- FieldBuilder fieldBuilder = AddProperty < TParameter > ( parameterName , false ) ;
218+ private readonly TypeBuilder _typeBuilder ;
242219
243- // Build the constructor with the parameter for the property
244- ConstructorBuilder constructorBuilder = _typeBuilder . DefineConstructor (
245- MethodAttributes . Public ,
246- CallingConventions . Standard ,
247- new Type [ ] { typeof ( TParameter ) } ) ;
220+ public TestTypeBuilder ( string TypeName )
221+ {
222+ AssemblyBuilder assemblyBuilder = AssemblyBuilder . DefineDynamicAssembly (
223+ new AssemblyName ( "Types" ) ,
224+ AssemblyBuilderAccess . Run ) ;
225+ ModuleBuilder moduleBuilder = assemblyBuilder . DefineDynamicModule ( "<Module>" ) ;
226+ _typeBuilder = moduleBuilder . DefineType (
227+ $ "Types.{ TypeName } ",
228+ TypeAttributes . Public |
229+ TypeAttributes . Class |
230+ TypeAttributes . Sealed |
231+ TypeAttributes . AutoClass |
232+ TypeAttributes . AnsiClass |
233+ TypeAttributes . BeforeFieldInit |
234+ TypeAttributes . AutoLayout ,
235+ null ) ;
236+ }
248237
249- // Define the parameter name
250- constructorBuilder . DefineParameter ( 1 , ParameterAttributes . None , MemberName ) ;
238+ public TestTypeBuilder AddConstructorWithReadOnlyProperty < TParameter > ( string parameterName )
239+ {
240+ // Add read-only property
241+ FieldBuilder fieldBuilder = AddProperty < TParameter > ( parameterName , false ) ;
251242
252- ILGenerator constructorIL = constructorBuilder . GetILGenerator ( ) ;
243+ // Build the constructor with the parameter for the property
244+ ConstructorBuilder constructorBuilder = _typeBuilder . DefineConstructor (
245+ MethodAttributes . Public ,
246+ CallingConventions . Standard ,
247+ new Type [ ] { typeof ( TParameter ) } ) ;
253248
254- // Call the base class constructor
255- constructorIL . Emit ( OpCodes . Ldarg_0 ) ;
256- constructorIL . Emit ( OpCodes . Call , typeof ( object ) . GetConstructor ( Type . EmptyTypes ) ) ;
249+ // Define the parameter name
250+ constructorBuilder . DefineParameter ( 1 , ParameterAttributes . None , MemberName ) ;
257251
258- // Set the property value
259- constructorIL . Emit ( OpCodes . Ldarg_0 ) ;
260- constructorIL . Emit ( OpCodes . Ldarg_1 ) ;
261- constructorIL . Emit ( OpCodes . Stfld , fieldBuilder ) ;
252+ ILGenerator constructorIL = constructorBuilder . GetILGenerator ( ) ;
262253
263- constructorIL . Emit ( OpCodes . Ret ) ;
254+ // Call the base class constructor
255+ constructorIL . Emit ( OpCodes . Ldarg_0 ) ;
256+ constructorIL . Emit ( OpCodes . Call , typeof ( object ) . GetConstructor ( Type . EmptyTypes ) ) ;
264257
265- return this ;
266- }
258+ // Set the property value
259+ constructorIL . Emit ( OpCodes . Ldarg_0 ) ;
260+ constructorIL . Emit ( OpCodes . Ldarg_1 ) ;
261+ constructorIL . Emit ( OpCodes . Stfld , fieldBuilder ) ;
267262
268- public TestTypeBuilder AddProperty < T > ( string propertyName )
269- {
270- AddProperty < T > ( propertyName , true ) ;
271- return this ;
272- }
263+ constructorIL . Emit ( OpCodes . Ret ) ;
273264
274- private FieldBuilder AddProperty < T > ( string propertyName , bool addSetter )
275- {
276- Type propertyType = typeof ( T ) ;
277- FieldBuilder fieldBuilder = _typeBuilder . DefineField ( $ "_{ propertyName } ", propertyType , FieldAttributes . Private ) ;
278- PropertyBuilder propertyBuilder = _typeBuilder . DefineProperty ( propertyName , PropertyAttributes . None , propertyType , null ) ;
265+ return this ;
266+ }
279267
280- AddGetMethod ( _typeBuilder , propertyBuilder , fieldBuilder , propertyName , propertyType ) ;
281- if ( addSetter )
268+ public TestTypeBuilder AddProperty < T > ( string propertyName )
282269 {
283- AddSetMethod ( _typeBuilder , propertyBuilder , fieldBuilder , propertyName , propertyType ) ;
270+ AddProperty < T > ( propertyName , true ) ;
271+ return this ;
284272 }
285273
286- return fieldBuilder ;
287- }
274+ private FieldBuilder AddProperty < T > ( string propertyName , bool addSetter )
275+ {
276+ Type propertyType = typeof ( T ) ;
277+ FieldBuilder fieldBuilder = _typeBuilder . DefineField ( $ "_{ propertyName } ", propertyType , FieldAttributes . Private ) ;
278+ PropertyBuilder propertyBuilder = _typeBuilder . DefineProperty ( propertyName , PropertyAttributes . None , propertyType , null ) ;
288279
289- public Type CreateType ( ) => _typeBuilder . CreateType ( ) ;
280+ AddGetMethod ( _typeBuilder , propertyBuilder , fieldBuilder , propertyName , propertyType ) ;
281+ if ( addSetter )
282+ {
283+ AddSetMethod ( _typeBuilder , propertyBuilder , fieldBuilder , propertyName , propertyType ) ;
284+ }
290285
291- private static PropertyBuilder AddGetMethod ( TypeBuilder typeBuilder , PropertyBuilder propertyBuilder , FieldBuilder fieldBuilder , string propertyName , Type propertyType )
292- {
293- MethodBuilder getMethodBuilder = typeBuilder . DefineMethod (
294- "get_" + propertyName ,
295- MethodAttributes . Public | MethodAttributes . SpecialName | MethodAttributes . HideBySig ,
296- propertyType ,
297- Type . EmptyTypes ) ;
298- ILGenerator getMethodGenerator = getMethodBuilder . GetILGenerator ( ) ;
286+ return fieldBuilder ;
287+ }
299288
300- getMethodGenerator . Emit ( OpCodes . Ldarg_0 ) ;
301- getMethodGenerator . Emit ( OpCodes . Ldfld , fieldBuilder ) ;
302- getMethodGenerator . Emit ( OpCodes . Ret ) ;
289+ public Type CreateType ( ) => _typeBuilder . CreateType ( ) ;
303290
304- propertyBuilder . SetGetMethod ( getMethodBuilder ) ;
291+ private static PropertyBuilder AddGetMethod ( TypeBuilder typeBuilder , PropertyBuilder propertyBuilder , FieldBuilder fieldBuilder , string propertyName , Type propertyType )
292+ {
293+ MethodBuilder getMethodBuilder = typeBuilder . DefineMethod (
294+ "get_" + propertyName ,
295+ MethodAttributes . Public | MethodAttributes . SpecialName | MethodAttributes . HideBySig ,
296+ propertyType ,
297+ Type . EmptyTypes ) ;
298+ ILGenerator getMethodGenerator = getMethodBuilder . GetILGenerator ( ) ;
305299
306- return propertyBuilder ;
307- }
300+ getMethodGenerator . Emit ( OpCodes . Ldarg_0 ) ;
301+ getMethodGenerator . Emit ( OpCodes . Ldfld , fieldBuilder ) ;
302+ getMethodGenerator . Emit ( OpCodes . Ret ) ;
308303
309- private static PropertyBuilder AddSetMethod ( TypeBuilder typeBuilder , PropertyBuilder propertyBuilder , FieldBuilder fieldBuilder , string propertyName , Type propertyType )
310- {
311- MethodBuilder setMethodBuilder = typeBuilder . DefineMethod (
312- $ "set_{ propertyName } ",
313- MethodAttributes . Public | MethodAttributes . SpecialName | MethodAttributes . HideBySig ,
314- null ,
315- new Type [ ] { propertyType } ) ;
304+ propertyBuilder . SetGetMethod ( getMethodBuilder ) ;
305+
306+ return propertyBuilder ;
307+ }
316308
317- ILGenerator setMethodGenerator = setMethodBuilder . GetILGenerator ( ) ;
318- Label modifyProperty = setMethodGenerator . DefineLabel ( ) ;
319- Label exitSet = setMethodGenerator . DefineLabel ( ) ;
309+ private static PropertyBuilder AddSetMethod ( TypeBuilder typeBuilder , PropertyBuilder propertyBuilder , FieldBuilder fieldBuilder , string propertyName , Type propertyType )
310+ {
311+ MethodBuilder setMethodBuilder = typeBuilder . DefineMethod (
312+ $ "set_{ propertyName } ",
313+ MethodAttributes . Public | MethodAttributes . SpecialName | MethodAttributes . HideBySig ,
314+ null ,
315+ new Type [ ] { propertyType } ) ;
316+
317+ ILGenerator setMethodGenerator = setMethodBuilder . GetILGenerator ( ) ;
318+ Label modifyProperty = setMethodGenerator . DefineLabel ( ) ;
319+ Label exitSet = setMethodGenerator . DefineLabel ( ) ;
320320
321- setMethodGenerator . MarkLabel ( modifyProperty ) ;
322- setMethodGenerator . Emit ( OpCodes . Ldarg_0 ) ;
323- setMethodGenerator . Emit ( OpCodes . Ldarg_1 ) ;
324- setMethodGenerator . Emit ( OpCodes . Stfld , fieldBuilder ) ;
321+ setMethodGenerator . MarkLabel ( modifyProperty ) ;
322+ setMethodGenerator . Emit ( OpCodes . Ldarg_0 ) ;
323+ setMethodGenerator . Emit ( OpCodes . Ldarg_1 ) ;
324+ setMethodGenerator . Emit ( OpCodes . Stfld , fieldBuilder ) ;
325325
326- setMethodGenerator . Emit ( OpCodes . Nop ) ;
327- setMethodGenerator . MarkLabel ( exitSet ) ;
328- setMethodGenerator . Emit ( OpCodes . Ret ) ;
326+ setMethodGenerator . Emit ( OpCodes . Nop ) ;
327+ setMethodGenerator . MarkLabel ( exitSet ) ;
328+ setMethodGenerator . Emit ( OpCodes . Ret ) ;
329329
330- propertyBuilder . SetSetMethod ( setMethodBuilder ) ;
330+ propertyBuilder . SetSetMethod ( setMethodBuilder ) ;
331331
332- return propertyBuilder ;
332+ return propertyBuilder ;
333+ }
333334 }
334335 }
335- }
0 commit comments