public object InstanceMatching(ReadModelQueryDescriptor descriptor) { var readModelType = _typeDiscoverer.FindTypeByFullName(descriptor.GeneratedFrom); if (readModelType != null) { var readModelOfType = typeof(IReadModelOf<>).MakeGenericType(readModelType); var readModelOf = _container.Get(readModelOfType); var instanceMatchingMethod = readModelOfType.GetMethod("InstanceMatching"); var funcType = typeof(Func<,>).MakeGenericType(readModelType, typeof(bool)); var expressionType = typeof(Expression<>).MakeGenericType(funcType); var expressions = Array.CreateInstance(expressionType, descriptor.PropertyFilters.Count); var index=0; foreach (var key in descriptor.PropertyFilters.Keys) { var expression = GetPropertyEqualsExpression(readModelType, key.ToPascalCase(), descriptor.PropertyFilters[key]); expressions.SetValue(expression, index); index++; } var result = instanceMatchingMethod.Invoke(readModelOf, new[] { expressions }); return result; } return null; }
public object InstanceMatching(ReadModelQueryDescriptor descriptor) { var readModelType = _typeDiscoverer.FindTypeByFullName(descriptor.GeneratedFrom); if (readModelType != null) { var readModelOfType = typeof(IReadModelOf<>).MakeGenericType(readModelType); var readModelOf = _container.Get(readModelOfType); var instanceMatchingMethod = readModelOfType.GetMethod("InstanceMatching"); var genericAuthorizeMethod = _authorizeMethod.MakeGenericMethod(readModelType); var authorizationResult = genericAuthorizeMethod.Invoke(_fetchingSecurityManager, new[] { readModelOf }) as AuthorizationResult; if (!authorizationResult.IsAuthorized) return null; var funcType = typeof(Func<,>).MakeGenericType(readModelType, typeof(bool)); var expressionType = typeof(Expression<>).MakeGenericType(funcType); var expressions = Array.CreateInstance(expressionType, descriptor.PropertyFilters.Count); var index=0; foreach (var key in descriptor.PropertyFilters.Keys) { var expression = GetPropertyEqualsExpression(readModelType, key.ToPascalCase(), descriptor.PropertyFilters[key]); expressions.SetValue(expression, index); index++; } var result = instanceMatchingMethod.Invoke(readModelOf, new[] { expressions }); var filtered = _readModelFilters.Filter(new[] { result as IReadModel }); if (filtered.Count() == 1) return filtered.First(); } return null; }
public object InstanceMatching(ReadModelQueryDescriptor descriptor) { var readModelType = _typeDiscoverer.FindTypeByFullName(descriptor.GeneratedFrom); if (readModelType != null) { var readModelOfType = typeof(IReadModelOf <>).MakeGenericType(readModelType); var readModelOf = _container.Get(readModelOfType); var instanceMatchingMethod = readModelOfType.GetMethod("InstanceMatching"); var genericAuthorizeMethod = _authorizeMethod.MakeGenericMethod(readModelType); var authorizationResult = genericAuthorizeMethod.Invoke(_fetchingSecurityManager, new[] { readModelOf }) as AuthorizationResult; if (!authorizationResult.IsAuthorized) { return(null); } var funcType = typeof(Func <,>).MakeGenericType(readModelType, typeof(bool)); var expressionType = typeof(Expression <>).MakeGenericType(funcType); var expressions = Array.CreateInstance(expressionType, descriptor.PropertyFilters.Count); var index = 0; foreach (var key in descriptor.PropertyFilters.Keys) { var expression = GetPropertyEqualsExpression(readModelType, key.ToPascalCase(), descriptor.PropertyFilters[key]); expressions.SetValue(expression, index); index++; } var result = instanceMatchingMethod.Invoke(readModelOf, new[] { expressions }); var filtered = _readModelFilters.Filter(new[] { result as IReadModel }); if (filtered.Count() == 1) { return(filtered.First()); } } return(null); }