File: DynamicData\ModelProviders\SchemaCreator.cs
Project: ndp\fx\src\xsp\system\DynamicData\System.Web.DynamicData.csproj (System.Web.DynamicData)
using System.Data.Linq;
using System.Data.Objects;
using System.Globalization;
using System.Web.Resources;
 
namespace System.Web.DynamicData.ModelProviders {
    internal class SchemaCreator {
        private static SchemaCreator s_instance = new SchemaCreator();
 
        public static SchemaCreator Instance {
            get {
                return s_instance;
            }
        }
 
        public virtual DataModelProvider CreateDataModel(object contextInstance, Func<object> contextFactory) {
            if (IsDataContext(contextInstance.GetType())) {
                return new DLinqDataModelProvider(contextInstance, contextFactory);
            }
            if (IsObjectContext(contextInstance.GetType())) {
                return new EFDataModelProvider(contextInstance, contextFactory);
            }
 
            throw new InvalidOperationException(String.Format(CultureInfo.CurrentCulture, DynamicDataResources.SchemaCreator_UnknownModel, contextInstance.GetType().FullName));
        }
 
        public virtual bool ValidDataContextType(Type contextType) {
            // 
            return IsDataContext(contextType) || IsObjectContext(contextType);
        }
 
        internal static bool IsDataContext(Type contextType) {
            return IsValidType<DataContext>(contextType);
        }
 
        internal static bool IsObjectContext(Type contextType) {
            return IsValidType<ObjectContext>(contextType);
        }
 
        private static bool IsValidType<T>(Type contextType) where T : class {
            return contextType != null && typeof(T).IsAssignableFrom(contextType);
        }
    }
}