/// <summary>
        /// Project a type using a DTO
        /// </summary>
        /// <typeparam name="TProjection">The dto projection</typeparam>
        /// <typeparam name="TSource">The source type of the projection</typeparam>
        /// <param name="item">The source entity to project</param>
        /// <param name="instance"></param>
        /// <returns>The projected type</returns>
        public static TProjection ProjectedTo <TSource, TProjection>(this TSource item, TProjection instance)
            where TProjection : class where TSource : class
        {
            var adapter = TypeAdapterFactory.CreateAdapter();

            return(adapter.Adapt <TSource, TProjection>(item, instance));
        }
        /// <summary>
        /// projected a enumerable collection of items
        /// </summary>
        /// <typeparam name="TProjection">The dtop projection type</typeparam>
        /// <param name="items">the collection of entity items</param>
        /// <returns>Projected collection</returns>
        public static IEnumerable <TProjection> ProjectedAsCollection <TProjection>(this IEnumerable <object> items)
            where TProjection : class, new()
        {
            var adapter = TypeAdapterFactory.CreateAdapter();

            return(adapter.Adapt <IEnumerable <TProjection> >(items));
        }
        /// <summary>
        /// Project a type using a DTO
        /// </summary>
        /// <typeparam name="TProjection">The dto projection</typeparam>
        /// <param name="item">The source entity to project</param>
        /// <returns>The projected type</returns>
        public static TProjection ProjectedAs <TProjection>(this object item)
            where TProjection : class, new()
        {
            var adapter = TypeAdapterFactory.CreateAdapter();

            return(adapter.Adapt <TProjection>(item));
        }