C'è una discussione in corso tra i manutentori delle librerie DI esistenti, se creare o meno, mantenere e supportare un adattatore per il nuovo sistema DI integrato di ASP.NET. I manutentori di Autofac hanno confirmed che creeranno e supporteranno un adattatore, mentre il team di Ninject è stato silent e altri team come il team di Simple Injector (che include me) have explained che non supporteranno un adattatore.
Personalmente, penso che la libreria DI di base di ASP.NET Core sia una libreria DI DI buona e pulita, ma limitata a semplici applicazioni. Come ho spiegato here, molte funzionalità necessarie per lo sviluppo di applicazioni gestibili basate sui principi SOLID non sono supportate. Tuttavia, proprio come la libreria Unity DI ha fatto un paio di anni fa, penso che questo contenitore integrato potrebbe effettivamente indurre gli sviluppatori a iniziare a utilizzare l'iniezione delle dipendenze, che è una vittoria per il nostro settore.
Queste limitazioni rendono il contenitore integrato particolarmente adatto per configurare ed estendere il sistema ASP.NET stesso. Per creare grandi applicazioni gestibili, è necessario utilizzare una diversa libreria DI. Questo naturalmente va bene; dovrai scegliere gli strumenti giusti per il lavoro.
Sfortunatamente, fino ad ora, il team di ASP.NET ha comunicato publicly che utilizzando una diversa libreria DI significa che si dovrà scrivere/utilizzare un adattatore. Questo purtroppo è il messaggio errato IMO, perché la maggior parte delle librerie DI è incompatibile con l'API presentata dal contenitore integrato (come ho spiegato nello specifico here e here). Solo Autofac sembra ragionevolmente sincronizzato, il che spiega perché il team di Autofac ha scelto di mantenere un adattatore. Ma notate che anche Autofac ha dimostrato di essere incompatibile con l'astrazione definita da Microsoft e che (proprio come StructureMap) hanno dovuto rendere big changes al loro prodotto per poter essere in grado di rispettare l'astrazione. E i manutentori di Autofac sono severely frustrated sull'intero processo e sull'astrazione in generale. E come ho spiegato here, anche l'implementazione dell'adattatore di Ninject fornita da ASP.NET è stata interrotta.
Questo messaggio dal team ASP.NET per utilizzare un adattatore è un errore IMO grave, perché questo soffoca l'innovazione (mentre la libreria DI stessa non lo è, è solo un'altra libreria DI). L'ASP.Il team di NET sta promuovendo un modello in cui i componenti dell'applicazione e il sistema ASP.NET (e tutti gli altri sottosistemi che verranno implementati in futuro) verranno registrati nel contenitore personalizzato. È molto più ragionevole e pratico mantenere la configurazione dell'applicazione separata dalla configurazione del sistema ASP.NET (come spiegato here).
Per questo motivo, trovo l'uso di un adattatore per qualsiasi contenitore piuttosto inutile. Come ho mostrato here è davvero facile collegare il proprio contenitore DI, mantenendolo completamente separato dalle registrazioni di ASP.NET. Ciò significa che non è necessario il supporto per Ninject per poter utilizzare in modo efficace Ninject su un progetto ASP.NET Core. L'unica cosa che Ninject deve fare è creare una versione compatibile con .NET Core (nel caso in cui il tuo prodotto debba funzionare su quella nuova piattaforma).
Quindi, in poche parole, non sono sicuro che il supporto 'si stia spegnendo', sebbene alcuni manutentori DI (come il team Simple Injector, e probabilmente anche Castle Windsor e Ninject) abbiano scelto di non costruire, mantenere e supporta un'implementazione dell'adattatore per ASP.NET Core, perché non è necessario, ed è solo nel modo.
UPDATE novembre 2016
Sono stato discussing some improvements a ASP.NET core con Microsoft per rendere più facile plug un contenitore che non hanno un adattatore (date un'occhiata al mio example repository e soprattutto al Startup.cs of the Ninject sample project), ma fino ad ora Microsoft sembra aver bloccato i progressi perché (come afferma Fowler) la loro "bias towards conforming containers [è] annebbiamento [la loro] visione".
Grazie per il post intuitivo, la cosa principale che manca dal contenitore DI incorporato è che non esiste alcuna mappatura basata sulla convenzione. DEVO includere ogni singolo progetto nel mio progetto di avvio e mappare le dipendenze. Questo sembra un enorme passo falso, a meno che mi manchi qualcosa. – Spets
@Spets Il contenitore integrato è inteso in particolare come sistema di configurazione per ASP.NET stesso. Ciò significa che è possibile scambiare facilmente parti di ASP.NET e componenti di terze parti possono utilizzare lo stesso modello di configurazione. Il contenitore integrato è costruito attorno a quel modello e questo spiega il motivo per cui alcune funzionalità non sono implementate. Tieni presente che la registrazione batch è davvero facile da scrivere sopra il contenitore e, per diventare una libreria DI avvincente, è necessario implementare altre funzionalità più importanti. Ma ancora una volta, non abusare del sistema DI per la registrazione dei propri tipi. – Steven
Gotcha che ha senso. – Spets