Ejemplo n.º 1
0
        public ProjectorInfo(Type projectorType, AggregateViewInfo aggregateViewInfo, Boolean isRoot) : base(projectorType)
        {
            if (!projectorType.GetTypeInfo().IsSubclassOf(typeof(Projector)))
            {
                throw new ArgumentOutOfRangeException(nameof(projectorType));
            }
            AggregateView = aggregateViewInfo ?? throw new ArgumentNullException(nameof(aggregateViewInfo));

            IsRoot = isRoot;
        }
Ejemplo n.º 2
0
        private ProjectorInfo ProduceProjectorInfoFromType(AggregateInfo aggregateInfo, AggregateViewInfo aggregateViewInfo, Type projectorType)
        {
            var projectorInfo = new ProjectorInfo(projectorType, aggregateViewInfo, aggregateInfo.IsRoot);

            var eventTypes = projectorInfo.Type.GetTypeInfo().DeclaredMethods
                             .SelectMany(m => m.GetParameters())
                             .Select(p => p.ParameterType)
                             .Where(t => t.GetTypeInfo().IsSubclassOf(typeof(AggregateEvent)))
                             .Distinct();

            projectorInfo.Events = eventTypes.Select(t => _logicSchema.GetAggregateEvent(t)).ToImmutableHashSet();

            return(projectorInfo);
        }