Разрешение зависимостей

Примечание.

Только в EF6 и более поздних версиях. Функции, API и другие возможности, описанные на этой странице, появились в Entity Framework 6. При использовании более ранней версии могут быть неприменимы некоторые или все сведения.

Начиная с EF6, Entity Framework содержит механизм общего назначения для получения реализаций служб, которые требуется. То есть, если EF использует экземпляр некоторых интерфейсов или базовых классов, он запрашивает конкретную реализацию интерфейса или базового класса. Это достигается с помощью интерфейса IDbDependencyResolver:

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

Метод GetService обычно вызывается EF и обрабатывается реализацией IDbDependencyResolver, предоставляемой EF или приложением. При вызове аргумент типа является интерфейсом или типом базового класса запрашиваемой службы, а ключевой объект имеет значение NULL или объект, предоставляющий контекстную информацию о запрошенной службе.

Если иное не указано, что возвращаемый объект должен быть потокобезопасным, так как он может использоваться в качестве одноэлементного. Во многих случаях возвращаемый объект является фабрикой, в которой сама фабрика должна быть потокобезопасной, но объект, возвращаемый из фабрики, не должен быть потокобезопасной, так как новый экземпляр запрашивается из фабрики для каждого использования.

В этой статье не содержатся полные сведения о том, как реализовать IDbDependencyResolver, но вместо этого выступает в качестве ссылки на типы служб (то есть интерфейс и типы базовых классов), для которых EF вызывает GetService и семантику ключевого объекта для каждого из этих вызовов.

System.Data.Entity.IDatabaseInitializer<TContext>

Версия, представленная: EF6.0.0

Возвращаемый объект: инициализатор базы данных для заданного типа контекста

Ключ: не используется; будет иметь значение NULL

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

Версия, представленная: EF6.0.0

Возвращенный объект: фабрика для создания генератора SQL, который можно использовать для миграций и других действий, которые вызывают создание базы данных, например создание базы данных с инициализаторами баз данных.

Ключ. Строка, содержащая инвариантное имя поставщика ADO.NET, указывающее тип базы данных, для которой будет создан SQL. Например, генератор SQL Server возвращается для ключа System.Data.SqlClient.

Примечание.

Дополнительные сведения о службах, связанных с поставщиком , в EF6 см. в разделе модели поставщика EF6.

System.Data.Entity.Core.Common.DbProviderServices

Версия, представленная: EF6.0.0

Возвращенный объект: поставщик EF, используемый для заданного инвариантного имени поставщика

Ключ: строка, содержащая инвариантное имя поставщика ADO.NET, указывающее тип базы данных, для которой требуется поставщик. Например, поставщик SQL Server возвращается для ключа System.Data.SqlClient.

Примечание.

Дополнительные сведения о службах, связанных с поставщиком , в EF6 см. в разделе модели поставщика EF6.

System.Data.Entity.Infrastructure.IDbConnectionFactory

Версия, представленная: EF6.0.0

Возвращаемый объект: фабрика соединений, которая будет использоваться при создании подключения к базе данных по соглашению. То есть, если подключение или строка подключения не предоставляется EF, и строка подключения не можно найти в app.config или web.config, эта служба используется для создания соединения по соглашению. Изменение фабрики подключений позволяет EF использовать другой тип базы данных (например, SQL Server Compact Edition) по умолчанию.

Ключ: не используется; будет иметь значение NULL

Примечание.

Дополнительные сведения о службах, связанных с поставщиком , в EF6 см. в разделе модели поставщика EF6.

System.Data.Entity.Infrastructure.IManifestTokenService

Версия, представленная: EF6.0.0

Возвращенный объект: служба, которая может создать маркер манифеста поставщика из подключения. Эта служба обычно используется двумя способами. Во-первых, его можно использовать для предотвращения подключения кода к базе данных при создании модели. Во-вторых, его можно использовать для принудительного создания модели для конкретной версии базы данных, например для принудительного применения модели для SQL Server 2005, даже если иногда используется SQL Server 2008.

Время существования объекта: один и тот же объект может использоваться несколько раз и одновременно различными потоками.

Ключ: не используется; будет иметь значение NULL

System.Data.Entity.Infrastructure.IDbProviderFactoryService

Версия, представленная: EF6.0.0

Возвращенный объект: служба, которая может получить фабрику поставщиков из заданного подключения. В .NET 4.5 поставщик общедоступен из подключения. В .NET 4 реализация этой службы по умолчанию использует некоторые эвристики для поиска соответствующего поставщика. Если они завершаются сбоем, новая реализация этой службы может быть зарегистрирована для предоставления соответствующего разрешения.

Ключ: не используется; будет иметь значение NULL

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

Версия, представленная: EF6.0.0

Возвращенный объект: фабрика, которая создаст ключ кэша модели для заданного контекста. По умолчанию EF кэширует одну модель на тип DbContext для каждого поставщика. Другую реализацию этой службы можно использовать для добавления других сведений, таких как имя схемы, в ключ кэша.

Ключ: не используется; будет иметь значение NULL

System.Data.Entity.Spatial.DbSpatialServices

Версия, представленная: EF6.0.0

Возвращенный объект: пространственный поставщик EF, который добавляет поддержку базового поставщика EF для географических и геометрических пространственных типов.

Ключ: DbSpatialServices запрашивается двумя способами. Во-первых, пространственные службы, относящиеся к поставщику, запрашиваются с помощью объекта DbProviderInfo (который содержит инвариантное имя и маркер манифеста) в качестве ключа. Во-вторых, dbSpatialServices можно запросить без ключа. Это используется для разрешения "глобального пространственного поставщика", который используется при создании автономных типов DbGeography или DbGeometry.

Примечание.

Дополнительные сведения о службах, связанных с поставщиком , в EF6 см. в разделе модели поставщика EF6.

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

Версия, представленная: EF6.0.0

Возвращенный объект: фабрика для создания службы, которая позволяет поставщику реализовать повторные попытки или другое поведение при выполнении запросов и команд в базе данных. Если реализация не указана, EF просто выполнит команды и распространяет все исключения. Для SQL Server эта служба используется для предоставления политики повторных попыток, которая особенно полезна при выполнении на облачных серверах баз данных, таких как SQL Azure.

Ключ: объект ExecutionStrategyKey, содержащий инвариантное имя поставщика и при необходимости имя сервера, для которого будет использоваться стратегия выполнения.

Примечание.

Дополнительные сведения о службах, связанных с поставщиком , в EF6 см. в разделе модели поставщика EF6.

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

Версия, представленная: EF6.0.0

Возвращенный объект: фабрика, которая позволяет поставщику настроить сопоставление HistoryContext с таблицей __MigrationHistory , используемой EF Migrations. HistoryContext — это Code First DbContext и может быть настроен с помощью обычного API fluent для изменения таких элементов, как имя таблицы и спецификации сопоставления столбцов.

Ключ: не используется; будет иметь значение NULL

Примечание.

Дополнительные сведения о службах, связанных с поставщиком , в EF6 см. в разделе модели поставщика EF6.

System.Data.Common.DbProviderFactory

Версия, представленная: EF6.0.0

Возвращенный объект: поставщик ADO.NET, используемый для заданного инвариантного имени поставщика.

Ключ: строка, содержащая инвариантное имя поставщика ADO.NET

Примечание.

Эта служба обычно не изменяется напрямую, так как реализация по умолчанию использует обычную регистрацию поставщика ADO.NET. Дополнительные сведения о службах, связанных с поставщиком , в EF6 см. в разделе модели поставщика EF6.

System.Data.Entity.Infrastructure.IProviderInvariantName

Версия, представленная: EF6.0.0

Возвращаемый объект: служба, используемая для определения инвариантного имени поставщика для заданного типа DbProviderFactory. Реализация этой службы по умолчанию использует регистрацию поставщика ADO.NET. Это означает, что если поставщик ADO.NET не зарегистрирован в обычном режиме, так как DbProviderFactory разрешается EF, то для разрешения этой службы также потребуется.

Ключ: экземпляр DbProviderFactory, для которого требуется инвариантное имя.

Примечание.

Дополнительные сведения о службах, связанных с поставщиком , в EF6 см. в разделе модели поставщика EF6.

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

Версия, представленная: EF6.0.0

Возвращенный объект: кэш сборок, содержащих предварительно созданные представления. Замена обычно используется для того, чтобы сообщить EF, какие сборки содержат предварительно созданные представления без обнаружения.

Ключ: не используется; будет иметь значение NULL

System.Data.Entity.Infrastructure.Pluralization.IPluralizationService

Версия, представленная: EF6.0.0

Возвращенный объект: служба, используемая EF для плюрализации и сингуляризации имен. По умолчанию используется служба плюрализации английского языка.

Ключ: не используется; будет иметь значение NULL

System.Data.Entity.Infrastructure.Interception.IDbInterceptor

Версия, представленная: EF6.0.0

Возвращенные объекты: все перехватчики, которые должны быть зарегистрированы при запуске приложения. Обратите внимание, что эти объекты запрашиваются с помощью вызова GetServices, а все перехватчики, возвращенные любым сопоставителям зависимостей, будут зарегистрированы.

Ключ: не используется; будет иметь значение NULL.

Func<System.Data.Entity.DbContext, строка> действия<, System.Data.Entity.Infrastructure.Interception.DatabaseLogFormatter>

Версия, представленная: EF6.0.0

Возвращенный объект: фабрика, которая будет использоваться для создания модуля форматирования журнала базы данных, который будет использоваться при контексте. Свойство Database.Log задано в заданном контексте.

Ключ: не используется; будет иметь значение NULL.

Func<System.Data.Entity.DbContext>

Представлена версия: EF6.1.0

Возвращенный объект: фабрика, которая будет использоваться для создания экземпляров контекста для миграций, когда контекст не имеет конструктора без параметров.

Ключ: объект Type для типа производного DbContext, для которого требуется фабрика.

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

Представлена версия: EF6.1.0

Возвращенный объект: фабрика, которая будет использоваться для создания сериализаторов для сериализации строго типизированных пользовательских заметок, чтобы они могли быть сериализованы и десериализированы в XML для использования в code First Migrations.

Ключ: имя заметки, сериализованной или десериализуемой.

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

Представлена версия: EF6.1.0

Возвращенный объект: фабрика, которая будет использоваться для создания обработчиков транзакций, чтобы специальная обработка могла применяться для таких ситуаций, как обработка сбоев фиксации.

Ключ: объект ExecutionStrategyKey, содержащий инвариантное имя поставщика и при необходимости имя сервера, для которого будет использоваться обработчик транзакций.