Teilen über


Abhängigkeitsauflösung

Hinweis

Nur EF6 und höher: Die Features, APIs usw., die auf dieser Seite erläutert werden, wurden in Entity Framework 6 eingeführt. Wenn Sie eine frühere Version verwenden, gelten manche Informationen nicht.

Ab EF6 enthält Entity Framework einen allgemeinen Mechanismus zum Abrufen von Implementierungen von erforderlichen Diensten. Wenn also EF eine Instanz einiger Schnittstellen oder Basisklassen verwendet, wird eine konkrete Implementierung der Schnittstelle oder Basisklasse angefordert. Dies erfolgt über die Verwendung der IDbDependencyResolver-Schnittstelle:

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

Die GetService-Methode wird in der Regel von EF aufgerufen und von einer Implementierung von IDbDependencyResolver verarbeitet, die entweder von EF oder von der Anwendung bereitgestellt wird. Wenn das Typargument aufgerufen wird, ist das Typargument der Schnittstellen- oder Basisklassentyp des angeforderten Diensts, und das Schlüsselobjekt ist entweder NULL oder ein Objekt, das Kontextinformationen zum angeforderten Dienst bereitstellt.

Sofern nicht anders angegeben, muss jedes zurückgegebene Objekt threadsicher sein, damit es als Singleton verwendet werden kann. In vielen Fällen ist das zurückgegebene Objekt eine Factory. In diesem Fällen muss die Factory selbst threadsicher sein, aber das von der Factory zurückgegebene Objekt muss nicht threadsicher sein, da für jede Verwendung eine neue Instanz der Factory angefordert wird.

Dieser Artikel enthält keine vollständigen Details zur Implementierung von IDbDependencyResolver, sondern dient stattdessen als Referenz für die Diensttypen (d. h. die Schnittstellen- und Basisklassentypen), für die EF GetService aufruft, sowie die Semantik des Schlüsselobjekts für jeden dieser Aufrufe.

System.Data.Entity.IDatabaseInitializer<TContext>

Eingeführt in Version: EF6.0.0

Zurückgegebenes Objekt: ein Datenbankinitialisierer für den angegebenen Kontexttyp

Schlüssel: Nicht verwendet; ist NULL

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

Eingeführt in Version: EF6.0.0

Zurückgegebenes Objekt: eine Factory zum Erstellen eines SQL-Generators, der für Migrationsvorgänge und andere Aktionen verwendet werden kann, die dazu führen, dass eine Datenbank erstellt wird, z. B. für die Datenbankerstellung mit Datenbankinitialisierern.

Schlüssel: Eine Zeichenfolge, die den invarianten ADO.NET-Anbieternamen enthält, der den Datenbanktyp angibt, für den SQL-Code generiert wird. Der SQL Server-Generator wird beispielsweise für den Schlüssel „System.Data.SqlClient“ zurückgegeben.

Hinweis

Weitere Informationen zu anbieterbezogenen Diensten in EF6 finden Sie im Abschnitt zum EF6-Anbietermodell.

System.Data.Entity.Core.Common.DbProviderServices

Eingeführt in Version: EF6.0.0

Zurückgegebenes Objekt: der EF-Anbieter, der für einen bestimmten invarianten Anbieternamen verwendet werden soll

Schlüssel: eine Zeichenfolge, die den invarianten ADO.NET-Anbieternamen enthält, der den Datenbanktyp angibt, für den ein Anbieter erforderlich ist. Der SQL Server-Anbieter wird beispielsweise für den Schlüssel „System.Data.SqlClient“ zurückgegeben.

Hinweis

Weitere Informationen zu anbieterbezogenen Diensten in EF6 finden Sie im Abschnitt zum EF6-Anbietermodell.

System.Data.Entity.Infrastructure.IDbConnectionFactory

Eingeführt in Version: EF6.0.0

Zurückgegebenes Objekt: die Verbindungsfactory, die verwendet wird, wenn EF eine Datenbankverbindung nach Konvention erstellt. Das heißt, wenn keine Verbindung oder Verbindungszeichenfolge an EF übergeben wird und keine Verbindungszeichenfolge in den Dateien „app.config“ oder „web.config“ gefunden werden kann, wird dieser Dienst verwendet, um eine Verbindung nach Konvention zu erstellen. Wenn Sie die Verbindungsfactory ändern, kann EF standardmäßig einen anderen Datenbanktyp (z. B. SQL Server Compact Edition) verwenden.

Schlüssel: Nicht verwendet; ist NULL

Hinweis

Weitere Informationen zu anbieterbezogenen Diensten in EF6 finden Sie im Abschnitt zum EF6-Anbietermodell.

System.Data.Entity.Infrastructure.IManifestTokenService

Eingeführt in Version: EF6.0.0

Zurückgegebenes Objekt: ein Dienst, der ein Anbietermanifesttoken aus einer Verbindung generieren kann. Dieser Dienst wird in der Regel auf zwei Arten verwendet. Zunächst kann damit verhindert werden, dass beim Erstellen eines Modells Code First eine Verbindung mit der Datenbank herstellt. Außerdem kann damit erzwungen werden, dass Code First ein Modell für eine bestimmte Datenbankversion erstellt, z. B. um ein Modell für SQL Server 2005 zu erzwingen, auch wenn manchmal SQL Server 2008 verwendet wird.

Objektlebensdauer: Singleton – dasselbe Objekt kann mehrmals und parallel von verschiedenen Threads verwendet werden

Schlüssel: Nicht verwendet; ist NULL

System.Data.Entity.Infrastructure.IDbProviderFactoryService

Eingeführt in Version: EF6.0.0

Zurückgegebenes Objekt: ein Dienst, der eine Anbieterfactory aus einer bestimmten Verbindung abrufen kann. In .NET 4.5 kann der Anbieter über die Verbindung öffentlich zugänglich sein. In .NET 4 verwendet die Standardimplementierung dieses Diensts einige Heuristiken, um den passenden Anbieter zu ermitteln. Wenn diese fehlschlagen, kann eine neue Implementierung dieses Diensts registriert werden, um eine entsprechende Lösung bereitzustellen.

Schlüssel: Nicht verwendet; ist NULL

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

Eingeführt in Version: EF6.0.0

Zurückgegebenes Objekt: eine Factory, die einen Modellcacheschlüssel für einen bestimmten Kontext generiert. Standardmäßig speichert EF ein Modell pro DbContext-Typ und pro Anbieter zwischen. Eine andere Implementierung dieses Diensts kann verwendet werden, um dem Cacheschlüssel weitere Informationen hinzuzufügen, z. B. den Schemanamen.

Schlüssel: Nicht verwendet; ist NULL

System.Data.Entity.Spatial.DbSpatialServices

Eingeführt in Version: EF6.0.0

Zurückgegebenes Objekt: ein räumlicher EF-Anbieter, der dem grundlegenden EF-Anbieter für geografische und geometriebezogene räumliche Typen Unterstützung hinzufügt.

Schlüssel: DbSptialServices wird auf zwei Arten abgefragt. Zunächst werden anbieterspezifische räumliche Dienste mithilfe eines DbProviderInfo-Objekts (das den invarianten Namen und das Manifesttoken enthält) als Schlüssel angefordert. Zweitens kann DbSpatialServices ohne Schlüssel angefordert werden. Dies wird verwendet, um den „globalen räumlichen Anbieter“ aufzulösen, der beim Erstellen eigenständiger DbGeography- oder DbGeometry-Typen verwendet wird.

Hinweis

Weitere Informationen zu anbieterbezogenen Diensten in EF6 finden Sie im Abschnitt zum EF6-Anbietermodell.

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

Eingeführt in Version: EF6.0.0

Zurückgegebenes Objekt: eine Factory zum Erstellen eines Diensts, der einem Anbieter ermöglicht, Wiederholungen oder ein anderes Verhalten zu implementieren, wenn Abfragen und Befehle für die Datenbank ausgeführt werden. Wenn keine Implementierung bereitgestellt wird, führt EF einfach die Befehle aus und gibt alle ausgelösten Ausnahmen weiter. Für SQL Server wird dieser Dienst verwendet, um eine Wiederholungsrichtlinie bereitzustellen, die besonders nützlich ist, wenn sie auf cloudbasierten Datenbankservern wie SQL Azure ausgeführt wird.

Schlüssel: ein ExecutionStrategyKey-Objekt, das den invarianten Anbieternamen und optional einen Servernamen enthält, für den die Ausführungsstrategie verwendet wird.

Hinweis

Weitere Informationen zu anbieterbezogenen Diensten in EF6 finden Sie im Abschnitt zum EF6-Anbietermodell.

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

Eingeführt in Version: EF6.0.0

Zurückgegebenes Objekt: eine Factory, die einem Anbieter ermöglicht, die Zuordnung des HistoryContext zur Tabelle __MigrationHistory zu konfigurieren, die von EF-Migrationsvorgängen verwendet wird. Der HistoryContext ist ein Code First-DbContext und kann mithilfe der normalen Fluent-API konfiguriert werden, um Elemente wie den Namen der Tabelle und die Spaltenzuordnungsspezifikationen zu ändern.

Schlüssel: Nicht verwendet; ist NULL

Hinweis

Weitere Informationen zu anbieterbezogenen Diensten in EF6 finden Sie im Abschnitt zum EF6-Anbietermodell.

System.Data.Common.DbProviderFactory

Eingeführt in Version: EF6.0.0

Zurückgegebenes Objekt: der ADO.NET-Anbieter, der für einen bestimmten invarianten Anbieternamen verwendet werden soll.

Schlüssel: eine Zeichenfolge, die den invarianten Namen des ADO.NET-Anbieters enthält

Hinweis

Dieser Dienst wird in der Regel nicht direkt geändert, da die Standardimplementierung die normale ADO.NET-Anbieterregistrierung verwendet. Weitere Informationen zu anbieterbezogenen Diensten in EF6 finden Sie im Abschnitt zum EF6-Anbietermodell.

System.Data.Entity.Infrastructure.IProviderInvariantName

Eingeführt in Version: EF6.0.0

Zurückgegebenes Objekt: ein Dienst, der verwendet wird, um einen invarianten Anbieternamen für einen bestimmten DbProviderFactory-Typ zu bestimmen. Die Standardimplementierung dieses Diensts verwendet die ADO.NET-Anbieterregistrierung. Wenn der ADO.NET-Anbieter nicht auf die normale Weise registriert wird, bedeutet dies, dass es dann auch erforderlich ist, diesen Dienst aufzulösen, da DbProviderFactory von EF aufgelöst wird.

Schlüssel: die DbProviderFactory-Instanz, für die ein invarianter Name erforderlich ist.

Hinweis

Weitere Informationen zu anbieterbezogenen Diensten in EF6 finden Sie im Abschnitt zum EF6-Anbietermodell.

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

Eingeführt in Version: EF6.0.0

Zurückgegebenes Objekt: ein Cache der Assemblys, die vorab generierte Sichten enthalten. Ein Ersatz wird in der Regel verwendet, um EF zu informieren, welche Assemblys vorab generierte Sichten enthalten, ohne dass eine Ermittlung erforderlich ist.

Schlüssel: Nicht verwendet; ist NULL

System.Data.Entity.Infrastructure.Pluralization.IPluralizationService

Eingeführt in Version: EF6.0.0

Zurückgegebenes Objekt: ein Dienst, der von EF zum Pluralisieren und Singularisieren von Namen verwendet wird. Standardmäßig wird ein englischsprachiger Pluralisierungsdienst verwendet.

Schlüssel: Nicht verwendet; ist NULL

System.Data.Entity.Infrastructure.Interception.IDbInterceptor

Eingeführt in Version: EF6.0.0

Zurückgegebene Objekte: alle Abfangfunktionen (Interceptors), die beim Starten der Anwendung registriert werden sollen. Beachten Sie, dass diese Objekte mithilfe eines GetServices-Aufrufs angefordert und dass alle Abfangfunktionen registriert werden, die von den einzelnen Abhängigkeitsauflösern zurückgegeben werden.

Schlüssel: Nicht verwendet; ist NULL.

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

Eingeführt in Version: EF6.0.0

Zurückgegebenes Objekt: eine Factory zum Erstellen des Protokollformatierers der Datenbank, der verwendet wird, wenn die context.Database.Log-Eigenschaft auf den angegebenen Kontext festgelegt wurde.

Schlüssel: Nicht verwendet; ist NULL.

Func<System.Data.Entity.DbContext>

Eingeführt in Version: EF6.1.0

Zurückgegebenes Objekt: eine Factory zum Erstellen von Kontextinstanzen für Migrationsvorgänge, wenn der Kontext keinen zugänglichen Konstruktor aufweist.

Schlüssel: das Type-Objekt für den Typ des abgeleiteten DbContext, für den eine Factory erforderlich ist.

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

Eingeführt in Version: EF6.1.0

Zurückgegebenes Objekt: eine Factory zum Erstellen von Serialisierungsmodulen für die Serialisierung stark typisierter, benutzerdefinierter Anmerkungen, sodass diese serialisiert und in XML für die Verwendung in Code First-Migrationsvorgängen deserialisiert werden können.

Schlüssel: der Name der Anmerkung, die serialisiert oder deserialisiert wird.

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

Eingeführt in Version: EF6.1.0

Zurückgegebenes Objekt: eine Factory zum Erstellen von Handlern für Transaktionen, sodass ein spezielles Verfahren in Situationen wie dem Behandeln von Commitfehlern angewandt werden kann.

Schlüssel: ein ExecutionStrategyKey-Objekt, das den invarianten Anbieternamen und optional einen Servernamen enthält, für den der Transaktionshandler verwendet wird.