Condividi tramite


Risoluzione delle dipendenze

Nota

Solo EF6 e versioni successive: funzionalità, API e altri argomenti discussi in questa pagina sono stati introdotti in Entity Framework 6. Se si usa una versione precedente, le informazioni qui riportate, o parte di esse, non sono applicabili.

A partire da EF6, Entity Framework contiene un meccanismo per utilizzo generico per ottenere implementazioni di servizi necessari. Ovvero, quando EF usa un'istanza di alcune interfacce o classi di base, richiederà un'implementazione concreta dell'interfaccia o della classe di base da usare. Questo risultato viene ottenuto tramite l'uso dell'interfaccia IDbDependencyResolver:

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

Il metodo GetService viene in genere chiamato da ENTITY e viene gestito da un'implementazione di IDbDependencyResolver fornita da EF o dall'applicazione. Quando viene chiamato, l'argomento di tipo è il tipo di interfaccia o di classe base del servizio richiesto e l'oggetto chiave è Null o un oggetto che fornisce informazioni contestuali sul servizio richiesto.

Se non diversamente specificato, qualsiasi oggetto restituito deve essere thread-safe perché può essere usato come singleton. In molti casi l'oggetto restituito è una factory nel qual caso la factory stessa deve essere thread-safe, ma l'oggetto restituito dalla factory non deve essere thread-safe perché una nuova istanza viene richiesta dalla factory per ogni utilizzo.

Questo articolo non contiene dettagli completi su come implementare IDbDependencyResolver, ma funge invece da riferimento per i tipi di servizio (ovvero l'interfaccia e i tipi di classe base) per cui EF chiama GetService e la semantica dell'oggetto chiave per ognuna di queste chiamate.

System.Data.Entity.IDatabaseInitializer<TContext>

Versione introdotta: EF6.0.0

Oggetto restituito: inizializzatore di database per il tipo di contesto specificato

Chiave: non usata; sarà Null

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

Versione introdotta: EF6.0.0

Oggetto restituito: factory per creare un generatore SQL che può essere usato per Migrazioni e altre azioni che causano la creazione di un database, ad esempio la creazione di database con inizializzatori di database.

Chiave: stringa contenente il nome invariante del provider ADO.NET che specifica il tipo di database per cui verrà generato SQL. Ad esempio, il generatore SQL di SQL Server viene restituito per la chiave "System.Data.SqlClient".

Nota

Per altre informazioni sui servizi correlati al provider in EF6, vedere la sezione modello di provider EF6.

System.Data.Entity.Core.Common.DbProviderServices

Versione introdotta: EF6.0.0

Oggetto restituito: provider EF da usare per un determinato nome invariante del provider

Chiave: stringa contenente il nome invariante del provider ADO.NET che specifica il tipo di database per cui è necessario un provider. Ad esempio, il provider SQL Server viene restituito per la chiave "System.Data.SqlClient".

Nota

Per altre informazioni sui servizi correlati al provider in EF6, vedere la sezione modello di provider EF6.

System.Data.Entity.Infrastructure.IDbConnectionFactory

Versione introdotta: EF6.0.0

Oggetto restituito: factory di connessione che verrà usata quando EF crea una connessione al database per convenzione. Ovvero, quando non viene assegnata alcuna connessione o stringa di connessione a Entity Framework e non è possibile trovare stringa di connessione in app.config o web.config, questo servizio viene usato per creare una connessione per convenzione. La modifica della factory di connessione può consentire a EF di usare un tipo di database diverso (ad esempio, SQL Server Compact Edition) per impostazione predefinita. Non archiviare mai la password o altri dati sensibili nel codice del provider di configurazione o in file di configurazione di testo normale. Specificare i segreti all'esterno del progetto in modo che non possano essere inavvertitamente inviati a un repository del codice sorgente. Valutare la possibilità di proteggere il contenuto del file di configurazione usando la configurazione protetta.

Chiave: non usata; sarà Null

Nota

Per altre informazioni sui servizi correlati al provider in EF6, vedere la sezione modello di provider EF6.

System.Data.Entity.Infrastructure.IManifestTokenService

Versione introdotta: EF6.0.0

Oggetto restituito: servizio in grado di generare un token manifesto del provider da una connessione. Questo servizio viene in genere usato in due modi. In primo luogo, può essere usato per evitare la connessione Code First al database durante la compilazione di un modello. In secondo luogo, può essere usato per forzare code first a compilare un modello per una versione specifica del database, ad esempio per forzare un modello per SQL Server 2005 anche se talvolta viene usato SQL Server 2008.

Durata dell'oggetto: Singleton: lo stesso oggetto può essere usato più volte e contemporaneamente da thread diversi

Chiave: non usata; sarà Null

System.Data.Entity.Infrastructure.IDbProviderFactoryService

Versione introdotta: EF6.0.0

Oggetto restituito: servizio in grado di ottenere una factory del provider da una determinata connessione. In .NET 4.5 il provider è accessibile pubblicamente dalla connessione. In .NET 4 l'implementazione predefinita di questo servizio usa alcune euristiche per trovare il provider corrispondente. Se questi errori hanno esito negativo, è possibile registrare una nuova implementazione di questo servizio per fornire una risoluzione appropriata.

Chiave: non usata; sarà Null

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

Versione introdotta: EF6.0.0

Oggetto restituito: factory che genererà una chiave della cache del modello per un determinato contesto. Per impostazione predefinita, Ef memorizza nella cache un modello per ogni tipo DbContext per provider. È possibile usare un'implementazione diversa di questo servizio per aggiungere altre informazioni, ad esempio il nome dello schema, alla chiave della cache.

Chiave: non usata; sarà Null

System.Data.Entity.Spatial.DbSpatialServices

Versione introdotta: EF6.0.0

Oggetto restituito: provider spaziale ef che aggiunge il supporto al provider EF di base per i tipi geography e geometry spaziali.

Chiave: DbSpatialServices viene richiesto in due modi. Per prima cosa, i servizi spaziali specifici del provider vengono richiesti usando un oggetto DbProviderInfo (che contiene il nome invariante e il token manifesto) come chiave. In secondo luogo, è possibile richiedere DbSpatialServices senza chiave. Viene usato per risolvere il "provider spaziale globale" usato durante la creazione di tipi DbGeography autonomi o DbGeometry.

Nota

Per altre informazioni sui servizi correlati al provider in EF6, vedere la sezione modello di provider EF6.

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

Versione introdotta: EF6.0.0

Oggetto restituito: factory per creare un servizio che consente a un provider di implementare nuovi tentativi o altro comportamento quando vengono eseguite query e comandi sul database. Se non viene fornita alcuna implementazione, Entity Framework eseguirà semplicemente i comandi e propaga tutte le eccezioni generate. Per SQL Server questo servizio viene usato per fornire criteri di ripetizione dei tentativi particolarmente utili quando vengono eseguiti su server di database basati sul cloud, ad esempio SQL Azure.

Chiave: oggetto ExecutionStrategyKey che contiene il nome invariante del provider e facoltativamente un nome del server per il quale verrà usata la strategia di esecuzione.

Nota

Per altre informazioni sui servizi correlati al provider in EF6, vedere la sezione modello di provider EF6.

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

Versione introdotta: EF6.0.0

Oggetto restituito: factory che consente a un provider di configurare il mapping di HistoryContext alla __MigrationHistory tabella usata da Entity Framework Migrations. HistoryContext è un DbContext Code First e può essere configurato usando la normale API Fluent per modificare elementi come il nome della tabella e le specifiche di mapping delle colonne.

Chiave: non usata; sarà Null

Nota

Per altre informazioni sui servizi correlati al provider in EF6, vedere la sezione modello di provider EF6.

System.Data.Common.DbProviderFactory

Versione introdotta: EF6.0.0

Oggetto restituito: provider ADO.NET da utilizzare per un determinato nome invariante del provider.

Chiave: stringa contenente il nome invariante del provider ADO.NET

Nota

Questo servizio non viene in genere modificato direttamente perché l'implementazione predefinita usa la normale registrazione del provider ADO.NET. Per altre informazioni sui servizi correlati al provider in EF6, vedere la sezione modello di provider EF6.

System.Data.Entity.Infrastructure.IProviderInvariantName

Versione introdotta: EF6.0.0

Oggetto restituito: un servizio utilizzato per determinare un nome invariante del provider per un determinato tipo di DbProviderFactory. L'implementazione predefinita di questo servizio usa la registrazione del provider ADO.NET. Ciò significa che se il provider di ADO.NET non è registrato nel modo normale perché DbProviderFactory viene risolto da EF, sarà necessario risolvere anche questo servizio.

Chiave: istanza di DbProviderFactory per la quale è necessario un nome invariante.

Nota

Per altre informazioni sui servizi correlati al provider in EF6, vedere la sezione modello di provider EF6.

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

Versione introdotta: EF6.0.0

Oggetto restituito: una cache degli assembly che contengono viste pregenerate. Una sostituzione viene in genere usata per informare EF quali assembly contengono viste pregenerate senza eseguire alcuna individuazione.

Chiave: non usata; sarà Null

System.Data.Entity.Infrastructure.Pluralization.IPluralizationService

Versione introdotta: EF6.0.0

Oggetto restituito: un servizio usato da ENTITY per pluralizzare e singolarizzare i nomi. Per impostazione predefinita viene usato un servizio di pluralizzazione in inglese.

Chiave: non usata; sarà Null

System.Data.Entity.Infrastructure.Interception.IDbInterceptor

Versione introdotta: EF6.0.0

Oggetti restituiti: tutti gli intercettori che devono essere registrati all'avvio dell'applicazione. Si noti che questi oggetti vengono richiesti usando la chiamata GetServices e tutti gli intercettori restituiti da qualsiasi sistema di risoluzione delle dipendenze verranno registrati.

Chiave: non usata. Sarà Null.

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

Versione introdotta: EF6.0.0

Oggetto restituito: factory che verrà utilizzata per creare il formattatore di log del database che verrà utilizzato quando il contesto. La proprietà Database.Log viene impostata nel contesto specificato.

Chiave: non usata. Sarà Null.

Func<System.Data.Entity.DbContext>

Versione introdotta: EF6.1.0

Oggetto restituito: factory che verrà usata per creare istanze di contesto per le migrazioni quando il contesto non dispone di un costruttore senza parametri accessibile.

Chiave: oggetto Type per il tipo del DbContext derivato per il quale è necessaria una factory.

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

Versione introdotta: EF6.1.0

Oggetto restituito: factory che verrà utilizzata per creare serializzatori per la serializzazione di annotazioni personalizzate fortemente tipizzate in modo che possano essere serializzate e deserializzate in XML da utilizzare in Migrazioni Code First.

Chiave: nome dell'annotazione serializzata o deserializzata.

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

Versione introdotta: EF6.1.0

Oggetto restituito: factory che verrà usata per creare gestori per le transazioni in modo che sia possibile applicare una gestione speciale per situazioni come la gestione degli errori di commit.

Chiave: oggetto ExecutionStrategyKey che contiene il nome invariante del provider e facoltativamente un nome del server per il quale verrà utilizzato il gestore delle transazioni.