/// <summary>
        /// Initializes a new instance of the <see cref="T:MemberAccessorFactory"/> class.
        /// </summary>
        /// <param name="allowCodeGeneration">if set to <c>true</c> [allow code generation].</param>
        public MemberAccessorFactory(bool allowCodeGeneration)
        {
            if (allowCodeGeneration)
            {
                // Detect runtime environment and create the appropriate factory
                if (Environment.Version.Major >= 2)
                {
#if dotnet2
                    _createPropertyAccessor = new CreateMemberPropertyAccessor(CreateDelegatePropertyAccessor);
                    _createFieldAccessor    = new CreateMemberFieldAccessor(CreateDynamicFieldAccessor);
#endif
                }
                else
                {
                    AssemblyName assemblyName = new AssemblyName();
                    assemblyName.Name = "iBATIS.FastPropertyAccessor" + HashCodeProvider.GetIdentityHashCode(this).ToString();

                    // Create a new assembly with one module
                    _assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
                    _moduleBuilder   = _assemblyBuilder.DefineDynamicModule(assemblyName.Name + ".dll");

                    _createPropertyAccessor = new CreateMemberPropertyAccessor(CreateEmitPropertyAccessor);
                    _createFieldAccessor    = new CreateMemberFieldAccessor(CreateFieldAccessor);
                }
            }
            else
            {
                _createPropertyAccessor = new CreateMemberPropertyAccessor(CreateReflectionPropertyAccessor);
                _createFieldAccessor    = new CreateMemberFieldAccessor(CreateReflectionFieldAccessor);
            }
        }
        /// <summary>
        /// Initializes a new instance of the <see cref="T:MemberAccessorFactory"/> class.
        /// </summary>
        /// <param name="allowCodeGeneration">if set to <c>true</c> [allow code generation].</param>
		public MemberAccessorFactory(bool allowCodeGeneration)
		{
			if (allowCodeGeneration)
            {
                // Detect runtime environment and create the appropriate factory
				if (Environment.Version.Major >= 2)
				{
#if dotnet2
                    _createPropertyAccessor = new CreateMemberPropertyAccessor(CreateDelegatePropertyAccessor);
                    _createFieldAccessor = new CreateMemberFieldAccessor(CreateDynamicFieldAccessor);
#endif
				}
				else
				{
                AssemblyName assemblyName = new AssemblyName();
				assemblyName.Name = "iBATIS.FastPropertyAccessor"+HashCodeProvider.GetIdentityHashCode(this).ToString();

				// Create a new assembly with one module
				_assemblyBuilder = AppDomain.CurrentDomain.DefineDynamicAssembly(assemblyName, AssemblyBuilderAccess.Run);
				_moduleBuilder = _assemblyBuilder.DefineDynamicModule(assemblyName.Name + ".dll");
				
                _createPropertyAccessor = new CreateMemberPropertyAccessor(CreateEmitPropertyAccessor);
                _createFieldAccessor = new CreateMemberFieldAccessor(CreateFieldAccessor);
				}
			}
			else
			{
				_createPropertyAccessor = new CreateMemberPropertyAccessor(CreateReflectionPropertyAccessor);
				_createFieldAccessor = new CreateMemberFieldAccessor(CreateReflectionFieldAccessor);
			}

		}