Example #1
0
            public Type CreateType(ModuleBuilder moduleBuilder)
            {
                _moduleBuilder = moduleBuilder;
                var hadProxyProperties = false;

                if (_iserializableImplementor.TypeIsSuitable)
                {
                    foreach (var member in _ospaceEntityType.Members)
                    {
                        if (_ipocoImplementor.CanProxyMember(member)
                            ||
                            _lazyLoadImplementor.CanProxyMember(member))
                        {
                            var baseProperty    = BaseType.GetTopProperty(member.Name);
                            var propertyBuilder = TypeBuilder.DefineProperty(
                                member.Name, PropertyAttributes.None, baseProperty.PropertyType, Type.EmptyTypes);

                            if (!_ipocoImplementor.EmitMember(TypeBuilder, member, propertyBuilder, baseProperty, _baseImplementor))
                            {
                                EmitBaseSetter(TypeBuilder, propertyBuilder, baseProperty);
                            }
                            if (!_lazyLoadImplementor.EmitMember(TypeBuilder, member, propertyBuilder, baseProperty, _baseImplementor))
                            {
                                EmitBaseGetter(TypeBuilder, propertyBuilder, baseProperty);
                            }

                            hadProxyProperties = true;
                        }
                    }

                    if (_typeBuilder != null)
                    {
                        _baseImplementor.Implement(TypeBuilder);
                        _iserializableImplementor.Implement(TypeBuilder, _serializedFields);
                    }
                }

#if NETSTANDARD
                return(hadProxyProperties ? TypeBuilder.CreateTypeInfo() : null);
#else
                return(hadProxyProperties ? TypeBuilder.CreateType() : null);
#endif
            }