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

Примечание.

Только в 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 генератор из 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

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

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

Ключ: не используется; будет иметь значение 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, Action<string>, System.Data.Entity.Infrastructure.Interception.DatabaseLogFormatter>

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

Возвращенный объект: фабрика, которая будет использоваться для создания форматировщика журнала базы данных, который будет использоваться, когда свойство context.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, содержащий инвариантное имя поставщика и при необходимости имя сервера, для которого будет использоваться обработчик транзакций.