Ejemplo n.º 1
0
        public FactUniverse()
        {
            _knownTypes = new ObservableCache <Type, TypeFacts>(
                ReflectionHelper.TypeEqualityComparer, CreateTypeFacts);
            _knownMethods = new ObservableCache <MethodBase, MethodFacts>(
                ReflectionHelper.MethodEqualityComparer, CreateMethodFacts);
            _knownFields = new ObservableCache <FieldInfo, FieldFacts>(
                ReflectionHelper.FieldEqualityComparer, CreateFieldFacts);

            KnownTypes       = _knownTypes;
            KnownMethodBases = _knownMethods;

            _knownTypes.AutoDo(OnNewType);
            KnownInterfaces = KnownTypes
                              .Where(type => type.TheType.IsInterface);

            KnownAbstractClasses = KnownTypes
                                   .Where(type => type.TheType.IsAbstract);

            KnownValueTypes = KnownTypes
                              .Where(type => type.TheType.IsValueType);

            KnownInstantiables = KnownTypes
                                 .Where(type => !type.TheType.IsInterface && !type.TheType.IsAbstract && !type.TheType.IsGenericParameter);

            KnownMethods = KnownMethodBases
                           .Where(method => method.Method is MethodInfo);
            KnownConstructors = KnownMethodBases
                                .Where(method => method.Method is ConstructorInfo);

            KnownMethodBases.ObserveOn(Scheduler.CurrentThread).AutoDo(OnNewMethod);

            KnownAllocationSites = _allocSites.AsObservable();
        }