// Copyright (c) 2004-2008 MySQL AB, 2008-2009 Sun Microsystems, Inc. // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License version 2 as published by // the Free Software Foundation // // There are special exceptions to the terms and conditions of the GPL // as it is applied to this software. View the full text of the // exception in file EXCEPTIONS in the directory of this software // distribution. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA #if !PocketPC using System.Data.Common; using System; using System.Reflection; namespace MySql.Data.MySqlClient { /// /// DBProviderFactory implementation for MysqlClient. /// public sealed class MySqlClientFactory : DbProviderFactory, IServiceProvider { /// /// Gets an instance of the . /// This can be used to retrieve strongly typed data objects. /// public static MySqlClientFactory Instance = new MySqlClientFactory(); private Type dbServicesType; private FieldInfo mySqlDbProviderServicesInstance; /// /// Returns a strongly typed instance. /// /// A new strongly typed instance of DbCommandBuilder. public override DbCommandBuilder CreateCommandBuilder() { return new MySqlCommandBuilder(); } /// /// Returns a strongly typed instance. /// /// A new strongly typed instance of DbCommand. public override DbCommand CreateCommand() { return new MySqlCommand(); } /// /// Returns a strongly typed instance. /// /// A new strongly typed instance of DbConnection. public override DbConnection CreateConnection() { return new MySqlConnection(); } /// /// Returns a strongly typed instance. /// /// A new strongly typed instance of DbDataAdapter. public override DbDataAdapter CreateDataAdapter() { return new MySqlDataAdapter(); } /// /// Returns a strongly typed instance. /// /// A new strongly typed instance of DbParameter. public override DbParameter CreateParameter() { return new MySqlParameter(); } /// /// Returns a strongly typed instance. /// /// A new strongly typed instance of DbConnectionStringBuilder. public override DbConnectionStringBuilder CreateConnectionStringBuilder() { return new MySqlConnectionStringBuilder(); } /// /// Returns true if a MySqlDataSourceEnumerator can be created; /// otherwise false. /// public override bool CanCreateDataSourceEnumerator { get { return false; } } #region IServiceProvider Members /// /// Provide a simple caching layer /// private Type DbServicesType { get { if (dbServicesType == null) { // Get the type this way so we don't have to reference System.Data.Entity // from our core provider dbServicesType = Type.GetType( @"System.Data.Common.DbProviderServices, System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089", false); } return dbServicesType; } } private FieldInfo MySqlDbProviderServicesInstance { get { if (mySqlDbProviderServicesInstance == null) { string fullName = Assembly.GetExecutingAssembly().FullName; fullName = fullName.Replace("MySql.Data", "MySql.Data.Entity"); fullName = String.Format("MySql.Data.MySqlClient.MySqlProviderServices, {0}", fullName); Type providerServicesType = Type.GetType(fullName, false); mySqlDbProviderServicesInstance = providerServicesType.GetField("Instance", BindingFlags.NonPublic | BindingFlags.Static | BindingFlags.Instance); } return mySqlDbProviderServicesInstance; } } object IServiceProvider.GetService(Type serviceType) { // DbProviderServices is the only service we offer up right now if (serviceType != DbServicesType) return null; if (MySqlDbProviderServicesInstance == null) return null; return MySqlDbProviderServicesInstance.GetValue(null); } #endregion } } #endif