TrackableData.TrackableResolver.GetContainerType C# (CSharp) Method

GetContainerType() public static method

public static GetContainerType ( Type trackableType ) : Type
trackableType System.Type
return System.Type
        public static Type GetContainerType(Type trackableType)
        {
            if (typeof(ITrackableContainer).IsAssignableFrom(trackableType))
            {
                var trackerType = trackableType.GetInterfaces()
                                               .FirstOrDefault(t => t.IsGenericType &&
                                                                    t.GetGenericTypeDefinition() == typeof(ITrackable<>));
                return trackerType?.GetGenericArguments()[0];
            }

            return null;
        }

Usage Example

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