Resolución de dependencias

Nota:

Solo EF6 y versiones posteriores: las características, las API, etc. que se tratan en esta página se han incluido a partir de Entity Framework 6. Si usa una versión anterior, no se aplica parte o la totalidad de la información.

A partir de EF6, Entity Framework contiene un mecanismo de uso general para obtener implementaciones de los servicios que requiere. Es decir, cuando EF usa una instancia de algunas interfaces o clases base, solicitará una implementación concreta de la interfaz o clase base que se va a usar. Esto se logra mediante el uso de la interfaz IDbDependencyResolver:

public interface IDbDependencyResolver
{
    object GetService(Type type, object key);
}

EF suele llamar al método GetService y se controla mediante una implementación de IDbDependencyResolver proporcionada por EF o por la aplicación. Cuando se llama, el argumento type es la interfaz o el tipo de clase base del servicio que se solicita, y el objeto de clave es null o un objeto que proporciona información contextual sobre el servicio solicitado.

A menos que se indique lo contrario, cualquier objeto devuelto debe ser seguro para subprocesos, ya que se puede usar como singleton. En muchos casos, el objeto devuelto es un generador en el que el propio generador debe ser seguro para subprocesos, pero el objeto devuelto desde la fábrica no necesita ser seguro para subprocesos, ya que se solicita una nueva instancia del generador para cada uso.

Este artículo no contiene detalles completos sobre cómo implementar IDbDependencyResolver, sino que actúa como referencia para los tipos de servicio (es decir, la interfaz y los tipos de clase base) para los que EF llama a GetService y la semántica del objeto de clave para cada una de estas llamadas.

System.Data.Entity.IDatabaseInitializer<TContext>

Versión introducida: EF6.0.0.

Objeto devuelto: inicializador de base de datos para el tipo de contexto especificado.

Clave: no se usa; será null.

Func<System.Data.Entity.Migrations.Sql.MigrationSqlGenerator>

Versión introducida: EF6.0.0.

Objeto devuelto: fábrica para crear un generador de SQL que se puede usar para migraciones y otras acciones que hacen que se cree una base de datos, como la creación de bases de datos con inicializadores de base de datos.

Clave: cadena que contiene el nombre invariable del proveedor de ADO.NET que especifica el tipo de base de datos para la que se generará SQL. Por ejemplo, se devuelve el generador de SQL Server para la clave "System.Data.SqlClient".

Nota:

Para más información sobre los servicios relacionados con el proveedor en EF6, consulte la sección Modelo de proveedor de EF6.

System.Data.Entity.Core.Common.DbProviderServices

Versión introducida: EF6.0.0.

Objeto devuelto: proveedor de EF que se va a usar para un nombre invariable de proveedor determinado.

Clave: cadena que contiene el nombre invariable del proveedor de ADO.NET que especifica el tipo de base de datos para la que se necesita un proveedor. Por ejemplo, el proveedor de SQL Server se devuelve para la clave "System.Data.SqlClient".

Nota:

Para más información sobre los servicios relacionados con el proveedor en EF6, consulte la sección Modelo de proveedor de EF6.

System.Data.Entity.Infrastructure.IDbConnectionFactory

Versión introducida: EF6.0.0.

Objeto devuelto: generador de conexiones que se usará cuando EF cree una conexión de base de datos por convención. Es decir, cuando no se da ninguna conexión o cadena de conexión a EF, y no se puede encontrar ninguna cadena de conexión en app.config o web.config, este servicio se usa para crear una conexión por convención. Cambiar el generador de conexiones puede permitir que EF use un tipo diferente de base de datos (por ejemplo, SQL Server Compact Edition) de forma predeterminada.

Clave: no se usa; será null.

Nota:

Para más información sobre los servicios relacionados con el proveedor en EF6, consulte la sección Modelo de proveedor de EF6.

System.Data.Entity.Infrastructure.IManifestTokenService

Versión introducida: EF6.0.0.

Objeto devuelto: un servicio que puede generar un token de manifiesto de proveedor a partir de una conexión. Este servicio se usa normalmente de dos maneras. En primer lugar, se puede usar para evitar que Code First se conecte a la base de datos al compilar un modelo. En segundo lugar, se puede usar para forzar a Code First a crear un modelo para una versión de base de datos específica (por ejemplo, forzar un modelo para SQL Server 2005 incluso si a veces se usa SQL Server 2008).

Duración del objeto: Singleton: el mismo objeto se puede usar varias veces y simultáneamente por parte de subprocesos diferentes.

Clave: no se usa; será null.

System.Data.Entity.Infrastructure.IDbProviderFactoryService

Versión introducida: EF6.0.0.

Objeto devuelto: un servicio que puede obtener un generador de proveedores de una conexión determinada. En .NET 4.5, el proveedor es accesible públicamente desde la conexión. En .NET 4, la implementación predeterminada de este servicio usa algunas heurística para encontrar el proveedor coincidente. Si se produce un error, se puede registrar una nueva implementación de este servicio para proporcionar una resolución adecuada.

Clave: no se usa; será null.

Func<DbContext, System.Data.Entity.Infrastructure.IDbModelCacheKey>

Versión introducida: EF6.0.0.

Objeto devuelto: un generador que generará una clave de caché del modelo para un contexto determinado. De forma predeterminada, EF almacena en caché un modelo por tipo DbContext por proveedor. Se puede usar una implementación diferente de este servicio para agregar otra información, como el nombre del esquema, a la clave de caché.

Clave: no se usa; será null.

System.Data.Entity.Spatial.DbSpatialServices

Versión introducida: EF6.0.0.

Objeto devuelto: proveedor espacial de EF que agrega compatibilidad al proveedor básico de EF para los tipos espaciales de geografía y geometría.

Clave: se solicita DbSptialServices de dos maneras. La primera, solicitando servicios espaciales específicos del proveedor mediante un objeto DbProviderInfo (que contiene un nombre invariable y un token de manifiesto) como clave. La segunda, solicitando DbSpatialServices sin clave. Se usa para resolver el "proveedor espacial global" que se usa al crear tipos DbGeography o DbGeometry independientes.

Nota:

Para más información sobre los servicios relacionados con el proveedor en EF6, consulte la sección Modelo de proveedor de EF6.

Func<System.Data.Entity.Infrastructure.IDbExecutionStrategy>

Versión introducida: EF6.0.0.

Objeto devuelto: un generador para crear un servicio que permita a un proveedor implementar reintentos u otro comportamiento cuando se ejecutan consultas y comandos en la base de datos. Si no se proporciona ninguna implementación, EF simplemente ejecutará los comandos y propagará las excepciones producidas. Para SQL Server, este servicio se usa para proporcionar una directiva de reintento que es especialmente útil cuando se ejecuta en servidores de bases de datos basados en la nube, como SQL Azure.

Clave: objeto ExecutionStrategyKey que contiene el nombre invariable del proveedor y, opcionalmente, un nombre de servidor para el que se usará la estrategia de ejecución.

Nota:

Para más información sobre los servicios relacionados con el proveedor en EF6, consulte la sección Modelo de proveedor de EF6.

Func<DbConnection, string, System.Data.Entity.Migrations.History.HistoryContext>

Versión introducida: EF6.0.0.

Objeto devuelto: un generador que permite a un proveedor configurar la asignación de HistoryContext a la tabla de __MigrationHistory usada por migraciones de EF. HistoryContext es un DbContext de Code First y se puede configurar mediante la API fluida normal para cambiar cosas como el nombre de la tabla y las especificaciones de asignación de columnas.

Clave: no se usa; será null.

Nota:

Para más información sobre los servicios relacionados con el proveedor en EF6, consulte la sección Modelo de proveedor de EF6.

System.Data.Common.DbProviderFactory

Versión introducida: EF6.0.0.

Objeto devuelto: proveedor de ADO.NET que se va a usar para un nombre invariable de proveedor determinado.

Clave: cadena que contiene el nombre invariable del proveedor de ADO.NET.

Nota:

Este servicio no suele cambiarse directamente, ya que la implementación predeterminada usa el registro normal del proveedor de ADO.NET. Para más información sobre los servicios relacionados con el proveedor en EF6, consulte la sección Modelo de proveedor de EF6.

System.Data.Entity.Infrastructure.IProviderInvariantName

Versión introducida: EF6.0.0.

Objeto devuelto: un servicio que se usa para determinar un nombre invariable de proveedor para un tipo determinado de DbProviderFactory. La implementación predeterminada de este servicio usa el registro de proveedor ADO.NET. Esto significa que si el proveedor ADO.NET no está registrado de la manera normal porque DbProviderFactory está siendo resuelto por EF, entonces también será necesario resolver este servicio.

Clave: instancia de DbProviderFactory para la que se requiere un nombre invariable.

Nota:

Para más información sobre los servicios relacionados con el proveedor en EF6, consulte la sección Modelo de proveedor de EF6.

System.Data.Entity.Core.Mapping.ViewGeneration.IViewAssemblyCache

Versión introducida: EF6.0.0.

Objeto devuelto: una memoria caché de los ensamblados que contienen vistas generadas previamente. Normalmente, se usa un reemplazo para informar a EF de qué ensamblados contienen vistas generadas previamente sin realizar ninguna detección.

Clave: no se usa; será null.

System.Data.Entity.Infrastructure.Pluralization.IPluralizationService

Versión introducida: EF6.0.0.

Objeto devuelto: un servicio usado por EF para pluralizar y singularizar nombres. De forma predeterminada, se usa un servicio de pluralización en inglés.

Clave: no se usa; será null.

System.Data.Entity.Infrastructure.Interception.IDbInterceptor

Versión introducida: EF6.0.0.

Objetos devueltos: todos los interceptores que se deben registrar cuando se inicia la aplicación. Tenga en cuenta que estos objetos se solicitan mediante la llamada de GetServices y todos los interceptores devueltos por cualquier solucionador de dependencias se registrarán.

Clave: no se usa; será null.

Func<System.Data.Entity.DbContext, Action<string>, System.Data.Entity.Infrastructure.Interception.DatabaseLogFormatter>

Versión introducida: EF6.0.0.

Objeto devuelto: un generador que se usará para crear el formateador de registro de base de datos que se usa cuando la propiedad context.Database.Log se establece en el contexto especificado.

Clave: no se usa; será null.

Func<System.Data.Entity.DbContext>

Versión introducida: EF6.1.0.

Objeto devuelto: generador que se usará para crear instancias de contexto para migraciones cuando el contexto no tenga un constructor sin parámetros accesible.

Clave: el objeto Type del tipo del DbContext derivado para el que se necesita una fábrica.

Func<System.Data.Entity.Core.Metadata.Edm.IMetadataAnnotationSerializer>

Versión introducida: EF6.1.0.

Objeto devuelto: un generador que se usará para crear serializadores para la serialización de anotaciones personalizadas fuertemente tipadas de forma que se puedan serializar y deserializar en XML para su uso en migraciones de Code First.

Clave: nombre de la anotación que se va a serializar o deserializar.

Func<System.Data.Entity.Infrastructure.TransactionHandler>

Versión introducida: EF6.1.0.

Objeto devuelto: un generador que se usará para crear controladores para las transacciones para que se pueda aplicar un control especial a situaciones como controlar errores de confirmación.

Clave: objeto ExecutionStrategyKey que contiene el nombre invariable del proveedor y, opcionalmente, un nombre de servidor para el que se usará el controlador de transacciones.