In primo luogo, la mia domanda si applica solo alle app Web e tendo ad impostare la maggior parte delle associazioni Ninject con una risoluzione InRequestScope.Ninject Rebind in fase di runtime, può essere utilizzato come funzionalità?
sto pensando di modi per ottenere funzionalità di commutazione, e ha pensato che ho è quello di chiamare:
kernel.Rebind<IInterface>().To<RealImplementation>().InRequestScope();
mentre il sito è ancora attivo e funzionante, e l'interruttore è stato un colpetto. Se dunque io decido di disattivare la funzione Potrei chiamare
kernel.Rebind<IInterface>().To<EmptyImplementation>().InRequestScope();
Il mio pensiero è che l'InRequestScope avrebbe proteggere eventuali "in progress" richieste di codice, ma consentirà nuove richieste per ottenere la funzione di recente commutato.
Qualcuno sa per esperienza (o una più profonda comprensione di Ninject) se è probabile che funzioni, o se per me causerà più problemi. Ho guardato superficialmente al MEF, quindi questo sarà il mio prossimo punto di contatto se Ninject non è lo strumento migliore per il lavoro in questo caso.
hmmmm interessante. Quindi, se ti seguo correttamente, la tua idea è di sostituire rebind per .ToMethod in cui il codice potrebbe convalidare una condizione per ogni chiamata (ad esempio il flag set). Non penso che ciò causerebbe alcun sovraccarico di prestazioni poiché la mia ipotesi è che Ninject si lega per chiamata piuttosto che memorizzare un risultato di ritorno nella cache. In questo caso controllerei la memoria blu in modo che ci fosse una penalità di controllo, ma questa potrebbe essere memorizzata nella cache per x quantità di tempo accettabile. – Dylan
@Dylan Semantica meno banale come quella potrebbe probabilmente essere espressa in un [Provider] (https://github.com/ninject/ninject/wiki/Providers%2C-Factory-Methods-and-the-Activation-Context) (la cache potrebbe probabilmente essere gestita tramite DI e solo essere codice). Poi di nuovo, un semplice metodo statico potrebbe adattarsi al conto ... –