Partilhar via


Resolução de dependência

Observação

EF6 em diante apenas: os recursos, as APIs etc. discutidos nessa página foram introduzidos no Entity Framework 6. Se você estiver usando uma versão anterior, algumas ou todas as informações não se aplicarão.

A partir do EF6, o Entity Framework contém um mecanismo de uso geral para obter implementações dos serviços necessários. Ou seja, quando o EF usar uma instância de algumas interfaces ou classes de base, ele solicitará uma implementação concreta da interface ou da classe de base a ser usada. Isso é feito por meio do uso da interface IDbDependencyResolver:

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

O método GetService é normalmente chamado pelo EF e é tratado por uma implementação do IDbDependencyResolver fornecida pelo EF ou pelo aplicativo. Quando chamado, o argumento de tipo é a interface ou o tipo de classe base do serviço que está sendo solicitado, e o objeto key é nulo ou um objeto que fornece informações contextuais sobre o serviço solicitado.

A menos que seja declarado de outra forma, qualquer objeto retornado deve ser thread-safe, pois ele pode ser usado como um singleton. Em muitos casos, o objeto retornado é uma fábrica e, nesse caso, a própria fábrica deve ser thread-safe, mas o objeto retornado da fábrica não precisa ser thread-safe, pois uma nova instância é solicitada da fábrica para cada uso.

Este artigo não contém detalhes completos sobre como implementar IDbDependencyResolver, mas atua como uma referência para os tipos de serviço (ou seja, os tipos de interface e classe base) para os quais o EF chama GetService e a semântica do objeto chave para cada uma dessas chamadas.

System.Data.Entity.IDatabaseInitializer<TContext>

Versão introduzida: EF6.0.0

Objeto retornado: Um inicializador de banco de dados para o tipo de contexto fornecido

Chave: Não usada; será nula

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

Versão introduzida: EF6.0.0

Objeto retornado: Uma fábrica para criar um gerador de SQL que pode ser usado para migrações e outras ações que causam a criação de um banco de dados, como a criação de banco de dados com inicializadores de banco de dados.

Chave: Uma cadeia de caracteres que contém o nome invariante do provedor ADO.NET, especificando o tipo de banco de dados para o qual o SQL será gerado. Por exemplo, o gerador SQL do SQL Server é retornado para a chave "System.Data.SqlClient".

Observação

Para obter mais detalhes sobre os serviços relacionados ao provedor no EF6, consulte a seção Modelo de provedor do EF6.

System.Data.Entity.Core.Common.DbProviderServices

Versão introduzida: EF6.0.0

Objeto retornado: O provedor de EF a ser usado para um determinado nome de invariante de provedor

Chave: Uma cadeia de caracteres que contém o nome invariante do provedor ADO.NET, especificando o tipo de banco de dados para o qual um provedor é necessário. Por exemplo, o provedor do SQL Server é retornado para a chave "System.Data.SqlClient".

Observação

Para obter mais detalhes sobre os serviços relacionados ao provedor no EF6, consulte a seção Modelo de provedor do EF6.

System.Data.Entity.Infrastructure.IDbConnectionFactory

Versão introduzida: EF6.0.0

Objeto retornado: A fábrica de conexões que será usada quando o EF criar uma conexão de banco de dados por convenção. Ou seja, quando nenhuma conexão ou cadeia de conexão é fornecida ao EF e nenhuma cadeia de conexão pode ser encontrada no app.config ou web.config, esse serviço é usado para criar uma conexão por convenção. A alteração da fábrica de conexões pode permitir que o EF use um tipo diferente de banco de dados (por exemplo, SQL Server Compact Edition) por padrão. Nunca armazene senhas ou outros dados confidenciais no código do provedor de configuração ou nos arquivos de configuração de texto sem formatação. Especifique segredos fora do projeto para que eles não sejam acidentalmente comprometidos com um repositório de código-fonte. Considere proteger o conteúdo do arquivo de configuração usando a Configuração Protegida.

Chave: Não usada; será nula

Observação

Para obter mais detalhes sobre os serviços relacionados ao provedor no EF6, consulte a seção Modelo de provedor do EF6.

System.Data.Entity.Infrastructure.IManifestTokenService

Versão introduzida: EF6.0.0

Objeto retornado: Um serviço que pode gerar um token de manifesto do provedor a partir de uma conexão. Esse serviço normalmente é usado de duas maneiras. Primeiro, ele pode ser usado para evitar que o Code First se conecte ao banco de dados ao criar um modelo. Em segundo lugar, ele pode ser usado para forçar o Code First a criar um modelo para uma versão específica do banco de dados, por exemplo, para forçar um modelo para o SQL Server 2005 mesmo que às vezes o SQL Server 2008 seja usado.

Tempo de vida do objeto: Singleton – o mesmo objeto pode ser usado várias vezes e simultaneamente por threads diferentes

Chave: Não usada; será nula

System.Data.Entity.Infrastructure.IDbProviderFactoryService

Versão introduzida: EF6.0.0

Objeto retornado: Um serviço que pode obter uma fábrica de provedor de uma determinada conexão. No .NET 4.5, o provedor pode ser acessado publicamente por meio da conexão. No .NET 4, a implementação padrão desse serviço usa algumas heurísticas para localizar o provedor correspondente. Se eles falharem, uma nova implementação desse serviço poderá ser registrada para fornecer uma resolução apropriada.

Chave: Não usada; será nula

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

Versão introduzida: EF6.0.0

Objeto retornado: Uma fábrica que gerará uma chave de cache de modelo para um determinado contexto. Por padrão, o EF armazena em cache um modelo por tipo DbContext por provedor. Uma implementação diferente desse serviço pode ser usada para adicionar outras informações, como o nome do esquema, à chave de cache.

Chave: Não usada; será nula

System.Data.Entity.Spatial.DbSpatialServices

Versão introduzida: EF6.0.0

Objeto retornado: Um provedor espacial EF que adiciona suporte ao provedor EF básico para tipos espaciais de geografia e geometria.

Chave: DbSpatialServices é solicitado de duas maneiras. Primeiro, os serviços espaciais específicos do provedor são solicitados usando um objeto DbProviderInfo (que contém nome invariável e token de manifesto) como a chave. Em segundo lugar, DbSpatialServices pode ser solicitado sem chave. Isso é usado para resolver o "provedor espacial global" que é usado ao criar tipos DbGeography ou DbGeometry autônomos.

Observação

Para obter mais detalhes sobre os serviços relacionados ao provedor no EF6, consulte a seção Modelo de provedor do EF6.

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

Versão introduzida: EF6.0.0

Objeto retornado: Uma fábrica para criar um serviço que permite que um provedor implemente novas tentativas ou outro comportamento quando consultas e comandos são executados no banco de dados. Se nenhuma implementação for fornecida, o EF simplesmente executará os comandos e propagará as exceções geradas. Para o SQL Server, esse serviço é usado para fornecer uma política de repetição que é especialmente útil quando executado em servidores de banco de dados baseados em nuvem, como o SQL Azure.

Chave: Um objeto ExecutionStrategyKey que contém o nome invariável do provedor e, opcionalmente, um nome de servidor para o qual a estratégia de execução será usada.

Observação

Para obter mais detalhes sobre os serviços relacionados ao provedor no EF6, consulte a seção Modelo de provedor do EF6.

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

Versão introduzida: EF6.0.0

Objeto retornado: Uma fábrica que permite que um provedor configure o mapeamento do HistoryContext para a __MigrationHistory tabela usada pelas Migrações de EF. O HistoryContext é um DbContext do Code First e pode ser configurado usando a API fluente normal para alterar coisas como o nome da tabela e as especificações de mapeamento de coluna.

Chave: Não usada; será nula

Observação

Para obter mais detalhes sobre os serviços relacionados ao provedor no EF6, consulte a seção Modelo de provedor do EF6.

System.Data.Common.DbProviderFactory

Versão introduzida: EF6.0.0

Objeto retornado: O provedor de ADO.NET a ser usado para um determinado nome invariável do provedor.

Chave: Uma cadeia de caracteres que contém o nome invariável do provedor de ADO.NET

Observação

Esse serviço geralmente não é alterado diretamente, pois a implementação padrão usa o registro normal do provedor de ADO.NET. Para obter mais detalhes sobre os serviços relacionados ao provedor no EF6, consulte a seção Modelo de provedor do EF6.

System.Data.Entity.Infrastructure.IProviderInvariantName

Versão introduzida: EF6.0.0

Objeto retornado: Um serviço usado para determinar um nome invariável do provedor para um determinado tipo de DbProviderFactory. A implementação padrão desse serviço usa o registro do provedor de ADO.NET. Isso significa que, se o provedor de ADO.NET não estiver registrado da maneira normal porque o dbProviderFactory está sendo resolvido pelo EF, também será necessário resolver esse serviço.

Chave: A instância DbProviderFactory para a qual um nome invariável é necessário.

Observação

Para obter mais detalhes sobre os serviços relacionados ao provedor no EF6, consulte a seção Modelo de provedor do EF6.

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

Versão introduzida: EF6.0.0

Objeto retornado: Um cache dos assemblies que contêm exibições pré-geradas. Uma substituição normalmente é usada para informar a EF quais assemblies contêm exibições pré-geradas sem fazer nenhuma descoberta.

Chave: Não usada; será nula

System.Data.Entity.Infrastructure.Pluralization.IPluralizationService

Versão introduzida: EF6.0.0

Objeto retornado: Um serviço usado pelo EF para pluralizar e singularizar nomes. Por padrão, um serviço de pluralização em inglês é usado.

Chave: Não usada; será nula

System.Data.Entity.Infrastructure.Interception.IDbInterceptor

Versão introduzida: EF6.0.0

Objetos retornados: Todos os interceptores que devem ser registrados quando o aplicativo é iniciado. Observe que esses objetos são solicitados usando a chamada GetServices e todos os interceptores retornados por qualquer resolvedor de dependência serão registrados.

Chave: Não usada; será nula.

Func<System.Data.Entity.DbContext, Cadeia de caracteres de ação<>, System.Data.Entity.Infrastructure.Interception.DatabaseLogFormatter>

Versão introduzida: EF6.0.0

Objeto retornado: Uma fábrica que será usada para criar o formatador de log de banco de dados que será usado quando o contexto. A propriedade Database.Log é definida no contexto fornecido.

Chave: Não usada; será nula.

Func<System.Data.Entity.DbContext>

Versão introduzida: EF6.1.0

Objeto retornado: Uma fábrica que será usada para criar instâncias de contexto para migrações quando o contexto não tiver um construtor sem parâmetros acessível.

Chave: O objeto Type para o tipo do DbContext derivado para o qual uma fábrica é necessária.

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

Versão introduzida: EF6.1.0

Objeto retornado: uma fábrica que será usada para criar serializadores para serialização de anotações personalizadas fortemente tipadas, de modo que elas possam ser serializadas e desserializadas em XML para uso em Migrações do Code First.

Chave: O nome da anotação que está sendo serializada ou desserializada.

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

Versão introduzida: EF6.1.0

Objeto retornado: Uma fábrica que será usada para criar manipuladores para transações para que o tratamento especial possa ser aplicado a situações como tratamento de falhas de confirmação.

Chave: Um objeto ExecutionStrategyKey que contém o nome invariante do provedor e, opcionalmente, um nome de servidor para o qual o manipulador de transações será usado.