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; }
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); }