2016-07-19 139 views
9

Sto provando a portare un'applicazione asp.net su asp.net core. Ho l'iniezione di proprietà (usando ninject) sulla mia implementazione di UnitOfWork come questa.Proprietà dell'iniezione in Asp.Net Core

Esiste un modo per ottenere la stessa funzionalità utilizzando la compilazione in DI su .net core? È anche possibile utilizzare l'associazione basata sulla convenzione?

+0

Correlati: https://stackoverflow.com/questions/39849142/when-to-use-property-injection – Steven

risposta

10

No, il contenitore DI/IoC integrato viene intenzionalmente mantenuto semplice sia nell'uso che nelle funzioni per offrire una base per altri contenitori DI al plug-in.

Quindi non esiste un supporto integrato per: Rilevamento automatico, Registrazioni automatiche, Decoratori o Iniettori o registrazioni basate su convenzioni. Non ci sono piani per aggiungere questo al contenitore integrato, per quanto ne so.

È necessario utilizzare un contenitore di terze parti con supporto per l'iniezione di proprietà.

Si noti che l'iniezione di proprietà è considerata non valida nel 98% di tutti gli scenari, poiché nasconde le dipendenze e non vi è alcuna garanzia che l'oggetto venga iniettato quando viene creata la classe.

Con l'iniezione del costruttore è possibile imporlo tramite costruttore e verificare null e non creare l'istanza della classe. Con l'iniezione di proprietà questo è impossibile e durante i test unitari non è chiaro quali servizi/dipendenze la classe richiede quando non sono definiti nel costruttore, quindi è facile perdere e ottenere NullReferenceExceptions.

L'unico motivo valido per Property Injection che ho riscontrato è stato quello di iniettare servizi in classi proxy generate da una libreria di terze parti, ovvero proxy WCF creati da un'interfaccia in cui non si ha alcun controllo sulla creazione dell'oggetto.

Evitarlo ovunque altro.