In passato, ho usato le rondelle di turni che è un controller IoC di actionscript 3. Fondamentalmente la prima versione di switfsuspender aveva qualcosa di simile al kernel di Ninject chiamato iniettore.Ho bisogno di più Esempi pratici di Ninject
Se volevo creare un iniettore di applicazioni (con diciamo i mapping più rilevanti da utilizzare in tutta l'applicazione), ho dovuto iniettare l'iniettore stesso nelle classi dell'applicazione.
Mi chiedo ora qual è la pratica da utilizzare kernel.get <> tra diverse classi nell'applicazione. Dovrei iniettare il kernel stesso?
Personalmente preferisco usare kernel.inject ma se posso fare kernel.inject posso davvero iniettare le dipendenze manualmente, che è probabilmente migliore (bacio).
I casi di test sono buoni, ma sono lontani dai veri problemi pratici, quindi spero che tu possa aiutarmi a chiarire questo punto. Grazie.
Modifica: ho notato che alcune persone parlano di "root container", sembra che sia il concetto che sto cercando. Come dovrei configurare un container root e lasciare che le altre classi applicative lo sappiano?
codice di esempio Edit2 (ti prego di perdonare gli errori, è solo per esempio sake):
class SomeClass
{
public SomeClass()
{
Command cmd = new Command();
cmd.execute();
}
}
class SomeOtherClass:ISomeOtherClass
{
public void allright()
{
//right
}
}
class Command
{
ISomeOtherClass dependency;
void execute()
{
dependency.allright();
}
}
Program.Main()
{
IKernel kernel = new StandardKernel();
kernel.Bind<SomeClass>().ToSelf().InSingletonScope();
kernel.Bind<ISomeOtherClass>().To<SomeOtherClass>();
SomeClass sc = kernel.Get<SomeClass>();
}
non ho ancora verificare ciò, perché sto ancora combattendo con alcuni problemi di inizializzazione, ma la mia domanda è, come la classe di comando può conoscere SomeOtherClass? La mia ipotesi attuale è di iniettare il kernel in SomeClass e utilizzare il metodo Inject.
Grazie per la risposta ha senso, ma mentre è corretto, afferma solo che tutte le dipendenze devono essere conosciute in anticipo. Cosa succede quando questo non è possibile? (naturalmente quello che dico ha senso solo se gli oggetti vengono creati dinamicamente e ciò potrebbe accadere) – sebas
diciamo che SomeClass deve creare un numero definitivo di oggetti dinamici. Like SomeClass diventa Level e deve creare 30 stelle. le stelle hanno alcune dipendenze, come può Level iniettare quelle dipendenze alle stelle usando il kernel? – sebas
Questa è una buona domanda, e ti stai spostando oltre le semplici domande di iniezione di dipendenza a cui è possibile rispondere in questo formato. Questo tipo di situazione (creazione di oggetti complessi) tende a richiedere un altro pezzo, motivo per cui Remo ha menzionato le fabbriche nella sua risposta. Dovresti investigare o creare una fabbrica di stelle e iniettarla in SomeClass, oppure far risolvere a Ninject le stelle usando un metodo factory o Bind(). ToProvider(). –