Example #1
0
        private GetSessionDelegate CreateTypeSessionGetter(Type reflectedType)
        {
            // Find all auto properties and fields that can contain a proxy
            var properties = reflectedType
                             .GetProperties(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
                             .Where(o => o.IsAutoProperty(true)); // for non auto properties we will check the underlying field instead
            var fields = reflectedType
                         .GetFields(BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
                         .Where(o => !o.Name.StartsWith("<")); // Ignore compiler generated fields

            var list = new List <GetSessionDelegate>();

            foreach (var member in properties.Cast <MemberInfo>().Concat(fields))
            {
                if (!BreezeContractResolver.IsAssociation(member, _entityMetadataProvider, out var isScalar, out var memberType))
                {
                    continue;
                }

                var parameter    = Expression.Parameter(typeof(object));
                var getValueFunc = Expression.Lambda <Func <object, object> >(
                    Expression.Convert(
                        Expression.MakeMemberAccess(Expression.Convert(parameter, reflectedType), member),
                        typeof(object)),
                    parameter)
                                   .Compile();

                list.Add(isScalar
                    ? CreateGetSessionFromEntityFunction(getValueFunc, GetOrCreateTypeSessionGetter)
                    : CreateGetSessionFromCollectionFunction(getValueFunc, memberType, GetOrCreateTypeSessionGetter, IsEntityType));
            }

            return(CreateTypeSessionGetter(list.ToArray()));
        }
Example #2
0
 /// <summary>
 /// Constructs an instance of <see cref="DefaultJsonSerializerSettingsProvider"/>.
 /// </summary>
 public DefaultJsonSerializerSettingsProvider(BreezeContractResolver breezeContractResolver)
 {
     _breezeContractResolver    = breezeContractResolver;
     _serializerSettings        = new Lazy <JsonSerializerSettings>(CreateJsonSerializerSettings, LazyThreadSafetyMode.PublicationOnly);
     _serializerSettingsForSave = new Lazy <JsonSerializerSettings>(CreateJsonSerializerSettingsForSave, LazyThreadSafetyMode.PublicationOnly);
 }