Résolution des dépendances
Remarque
EF6 et versions ultérieures uniquement : Les fonctionnalités, les API, etc. décrites dans cette page ont été introduites dans Entity Framework 6. Si vous utilisez une version antérieure, certaines ou toutes les informations ne s’appliquent pas.
À compter d’EF6, Entity Framework contient un mécanisme à usage général pour obtenir des implémentations de services dont elle a besoin. Autrement dit, quand EF utilise une instance de certaines interfaces ou classes de base, il demande une implémentation concrète de l’interface ou de la classe de base à utiliser. Pour ce faire, utilisez l’interface IDbDependencyResolver :
public interface IDbDependencyResolver
{
object GetService(Type type, object key);
}
La méthode GetService est généralement appelée par EF et est gérée par une implémentation d’IDbDependencyResolver fourni par EF ou par l’application. Lorsqu’il est appelé, l’argument de type est le type d’interface ou de classe de base du service demandé, et l’objet clé est null ou un objet fournissant des informations contextuelles sur le service demandé.
Sauf indication contraire, tout objet retourné doit être thread-safe, car il peut être utilisé comme singleton. Dans de nombreux cas, l’objet retourné est une fabrique dans laquelle la fabrique elle-même doit être thread-safe, mais l’objet retourné à partir de la fabrique n’a pas besoin d’être thread-safe, car une nouvelle instance est demandée à partir de la fabrique pour chaque utilisation.
Cet article ne contient pas de détails complets sur la façon d’implémenter IDbDependencyResolver, mais agit plutôt comme référence pour les types de service (autrement dit, les types d’interface et de classe de base) pour lesquels EF appelle GetService et la sémantique de l’objet clé pour chacun de ces appels.
System.Data.Entity.IDatabaseInitializer<TContext>
Version introduite: EF6.0.0
Objet retourné: initialiseur de base de données pour le type de contexte donné
Clé : non utilisé; sera Null
Func<System.Data.Entity.Migrations.Sql.MigrationSqlGenerator>
Version introduite: EF6.0.0
Objet retourné: fabrique permettant de créer un générateur SQL qui peut être utilisé pour les migrations et d’autres actions qui entraînent la création d’une base de données, telles que la création de base de données avec des initialiseurs de base de données.
Clé: chaîne contenant le nom invariant du fournisseur ADO.NET spécifiant le type de base de données pour lequel SQL sera généré. Par exemple, le générateur SQL Server est retourné pour la clé « System.Data.SqlClient ».
Remarque
Pour plus d’informations sur les services liés au fournisseur dans EF6, consultez la section modèle de fournisseur EF6 .
System.Data.Entity.Core.Common.DbProviderServices
Version introduite: EF6.0.0
Objet retourné: le fournisseur EF à utiliser pour un nom invariant de fournisseur donné
Clé: chaîne contenant le nom invariant du fournisseur ADO.NET spécifiant le type de base de données pour lequel un fournisseur est nécessaire. Par exemple, le fournisseur SQL Server est retourné pour la clé « System.Data.SqlClient ».
Remarque
Pour plus d’informations sur les services liés au fournisseur dans EF6, consultez la section modèle de fournisseur EF6 .
System.Data.Entity.Infrastructure.IDbConnectionFactory
Version introduite: EF6.0.0
Objet retourné: fabrique de connexion qui sera utilisée lors de la création d’une connexion de base de données par convention. Autrement dit, lorsqu’aucune connexion ou chaîne de connexion n’est donnée à EF, et qu’aucune chaîne de connexion ne se trouve dans le app.config
ou web.config
, ce service est utilisé pour créer une connexion par convention. La modification de la fabrique de connexion peut permettre à EF d’utiliser un autre type de base de données (par exemple, SQL Server Compact Edition) par défaut. Ne stockez jamais des mots de passe ou d’autres données sensibles dans le code du fournisseur de configuration ou dans les fichiers de configuration en texte clair. Spécifiez les secrets en dehors du projet afin qu’ils ne puissent pas être validés par inadvertance dans un référentiel de code source. Envisagez de protéger le contenu du fichier de configuration à l’aide de la configuration protégée.
Clé : non utilisé; sera Null
Remarque
Pour plus d’informations sur les services liés au fournisseur dans EF6, consultez la section modèle de fournisseur EF6 .
System.Data.Entity.Infrastructure.IManifestTokenService
Version introduite: EF6.0.0
Objet retourné: service qui peut générer un jeton de manifeste de fournisseur à partir d’une connexion. Ce service est généralement utilisé de deux façons. Tout d’abord, il peut être utilisé pour éviter la connexion code first à la base de données lors de la génération d’un modèle. Ensuite, il peut être utilisé pour forcer Code First à générer un modèle pour une version de base de données spécifique , par exemple, pour forcer un modèle pour SQL Server 2005 même si parfois SQL Server 2008 est utilisé.
Durée de vie de l’objet: Singleton : le même objet peut être utilisé plusieurs fois et simultanément par différents threads
Clé : non utilisé; sera Null
System.Data.Entity.Infrastructure.IDbProviderFactoryService
Version introduite: EF6.0.0
Objet retourné: service pouvant obtenir une fabrique de fournisseur à partir d’une connexion donnée. Sur .NET 4.5, le fournisseur est accessible publiquement à partir de la connexion. Sur .NET 4, l’implémentation par défaut de ce service utilise certaines heuristiques pour rechercher le fournisseur correspondant. En cas d’échec, une nouvelle implémentation de ce service peut être inscrite pour fournir une résolution appropriée.
Clé : non utilisé; sera Null
Func<DbContext, System.Data.Entity.Infrastructure.IDbModelCacheKey>
Version introduite: EF6.0.0
Objet retourné: fabrique qui génère une clé de cache de modèle pour un contexte donné. Par défaut, EF met en cache un modèle par type DbContext par fournisseur. Une autre implémentation de ce service peut être utilisée pour ajouter d’autres informations, telles que le nom de schéma, à la clé de cache.
Clé : non utilisé; sera Null
System.Data.Entity.Spatial.DbSpatialServices
Version introduite: EF6.0.0
Objet retourné: fournisseur spatial EF qui ajoute la prise en charge au fournisseur EF de base pour les types spatiaux géographiques et géométriques.
Clé: DbSpatialServices est demandé de deux manières. Tout d’abord, les services spatiaux spécifiques au fournisseur sont demandés à l’aide d’un objet DbProviderInfo (qui contient un nom et un jeton manifeste invariants) comme clé. Ensuite, DbSpatialServices peut être demandé sans clé. Il est utilisé pour résoudre le « fournisseur spatial global » utilisé lors de la création de types DbGeography ou DbGeometry autonomes.
Remarque
Pour plus d’informations sur les services liés au fournisseur dans EF6, consultez la section modèle de fournisseur EF6 .
Func<System.Data.Entity.Infrastructure.IDbExecutionStrategy>
Version introduite: EF6.0.0
Objet retourné: fabrique pour créer un service qui permet à un fournisseur d’implémenter des nouvelles tentatives ou d’autres comportements lorsque des requêtes et des commandes sont exécutées sur la base de données. Si aucune implémentation n’est fournie, EF exécute simplement les commandes et propage toutes les exceptions levées. Pour SQL Server, ce service est utilisé pour fournir une stratégie de nouvelle tentative qui est particulièrement utile lors de l’exécution sur des serveurs de base de données cloud tels que SQL Azure.
Clé: objet ExecutionStrategyKey qui contient le nom invariant du fournisseur et éventuellement un nom de serveur pour lequel la stratégie d’exécution sera utilisée.
Remarque
Pour plus d’informations sur les services liés au fournisseur dans EF6, consultez la section modèle de fournisseur EF6 .
Func<DbConnection, string, System.Data.Entity.Migrations.History.HistoryContext>
Version introduite: EF6.0.0
Objet retourné: fabrique qui permet à un fournisseur de configurer le mappage de HistoryContext sur la table __MigrationHistory
utilisée par EF Migrations. HistoryContext est un code First DbContext et peut être configuré à l’aide de l’API Fluent normale pour modifier les éléments tels que le nom de la table et les spécifications de mappage de colonnes.
Clé : non utilisé; sera Null
Remarque
Pour plus d’informations sur les services liés au fournisseur dans EF6, consultez la section modèle de fournisseur EF6 .
System.Data.Common.DbProviderFactory
Version introduite: EF6.0.0
Objet retourné: le fournisseur ADO.NET à utiliser pour un nom invariant de fournisseur donné.
Clé: chaîne contenant le nom invariant du fournisseur ADO.NET
Remarque
Ce service n’est généralement pas modifié directement, car l’implémentation par défaut utilise l’inscription normale ADO.NET fournisseur. Pour plus d’informations sur les services liés au fournisseur dans EF6, consultez la section modèle de fournisseur EF6 .
System.Data.Entity.Infrastructure.IProviderInvariantName
Version introduite: EF6.0.0
Object retourné: service utilisé pour déterminer un nom invariant de fournisseur pour un type donné de DbProviderFactory. L’implémentation par défaut de ce service utilise l’inscription du fournisseur ADO.NET. Cela signifie que si le fournisseur ADO.NET n’est pas inscrit de la manière normale, car DbProviderFactory est résolu par EF, il sera également nécessaire de résoudre ce service.
Clé: instance DbProviderFactory pour laquelle un nom invariant est requis.
Remarque
Pour plus d’informations sur les services liés au fournisseur dans EF6, consultez la section modèle de fournisseur EF6 .
System.Data.Entity.Core.Mapping.ViewGeneration.IViewAssemblyCache
Version introduite: EF6.0.0
Objet retourné: cache des assemblys qui contiennent des vues prédéfinies. Un remplacement est généralement utilisé pour indiquer à EF quels assemblys contiennent des vues pré-générées sans effectuer de découverte.
Clé : non utilisé; sera Null
System.Data.Entity.Infrastructure.Pluralization.IPluralizationService
Version introduite: EF6.0.0
Objet retourné: un service utilisé par EF pour pluraliser et singulariser les noms. Par défaut, un service de pluralisation anglais est utilisé.
Clé : non utilisé; sera Null
System.Data.Entity.Infrastructure.Interception.IDbInterceptor
Version introduite: EF6.0.0
Objets retournés: tous les intercepteurs qui doivent être inscrits au démarrage de l’application. Notez que ces objets sont demandés à l’aide de l’appel GetServices et que tous les intercepteurs retournés par n’importe quel programme de résolution de dépendance sont inscrits.
Clé : non utilisé; sera Null.
Func<System.Data.Entity.DbContext, action<chaîne>, System.Data.Entity.Infrastructure.Interception.DatabaseLogFormatter>
Version introduite: EF6.0.0
Objet retourné: fabrique qui sera utilisée pour créer le formateur du journal de base de données qui sera utilisé lors du contexte. La propriété Database.Log est définie sur le contexte donné.
Clé : non utilisé; sera Null.
Func<System.Data.Entity.DbContext>
Version introduite: EF6.1.0
Objet retourné: fabrique qui sera utilisée pour créer des instances de contexte pour les migrations lorsque le contexte n’a pas de constructeur sans paramètre accessible.
Clé: objet Type pour le type du DbContext dérivé pour lequel une fabrique est nécessaire.
Func<System.Data.Entity.Core.Metadata.Edm.IMetadataAnnotationSerializer>
Version introduite: EF6.1.0
Objet retourné : une fabrique qui sera utilisée pour créer des sérialiseurs pour la sérialisation d’annotations personnalisées fortement typées afin qu’elles puissent être sérialisées et désérialisées en XML pour une utilisation dans les Migrations Code First.
Clé: nom de l’annotation sérialisée ou désérialisée.
Func<System.Data.Entity.Infrastructure.TransactionHandler>
Version introduite: EF6.1.0
Objet retourné: fabrique qui sera utilisée pour créer des gestionnaires pour les transactions afin que la gestion spéciale puisse être appliquée à des situations telles que la gestion des échecs de validation.
Clé: objet ExecutionStrategyKey qui contient le nom invariant du fournisseur et éventuellement un nom de serveur pour lequel le gestionnaire de transactions sera utilisé.