GetPocoType() public static method

public static GetPocoType ( Type trackableType ) : Type
trackableType System.Type
return System.Type
Beispiel #1
0
        public static Type GetDefaultTracker(Type trackableType)
        {
            // ITrackablePoco -> TrackablePocoTracker
            var pocoType = TrackableResolver.GetPocoType(trackableType);

            if (pocoType != null)
            {
                return(typeof(TrackablePocoTracker <>).MakeGenericType(pocoType));
            }

            // ITrackableContainer -> TrackableContainerTracker
            var containerType = TrackableResolver.GetContainerType(trackableType);

            if (containerType != null)
            {
                var trackerTypeName = containerType.Namespace + "." +
                                      "Trackable" + containerType.Name.Substring(1) + "Tracker";
                return(containerType?.Assembly.GetType(trackerTypeName));
            }

            // TrackableDictionary -> TrackableDictionaryTracker
            // TrackableSet -> TrackableSetTracker
            // TrackableList -> TrackableListTracker
            if (trackableType.IsGenericType)
            {
                var genericType = trackableType.GetGenericTypeDefinition();
                if (genericType == typeof(TrackableDictionary <,>))
                {
                    return(typeof(TrackableDictionaryTracker <,>).MakeGenericType(
                               trackableType.GetGenericArguments()));
                }
                if (genericType == typeof(TrackableSet <>))
                {
                    return(typeof(TrackableSetTracker <>).MakeGenericType(
                               trackableType.GetGenericArguments()));
                }
                if (genericType == typeof(TrackableList <>))
                {
                    return(typeof(TrackableListTracker <>).MakeGenericType(
                               trackableType.GetGenericArguments()));
                }
            }

            return(null);
        }