2010-02-23 4 views
5

Sto usando .Net 3.5 e un'applicazione console che alla fine diventerà un servizio di Windows.Quale DLL è il Bind (Of T) di Ninject che si trova in

maggior parte degli esempi che trovo usare qualcosa di simile

Bind<IWeapon>().To<Sword>(); 

Ho incluso tutte le DLL come riferimenti nel mio progetto e ho il compilatore è ancora lamenta. Qualche indizio su dove sto andando male? Spiacente, questa potrebbe essere una domanda stupida.

AGGIORNAMENTO: Basta notare un sacco di altre librerie che sembrano essere necessarie ma non sono referenziate. Ci sono biblioteche come Castle Core. Dovrebbero essere inclusi?

risposta

7

La prima cosa che devi essere sicuro di fare è eseguire il codice di binding all'interno di un modulo Ninject all'interno del metodo Load, che hai sovrascritto.

Ad esempio:

public class ApplicationModule : NinjectModule { 

    public override void Load() { 

    Bind<IWeapon>().To<Sword>(); 

    // additional bindings continue ... 
    } 
} 

La classe NinjectModule eredita classi e interfacce che definiscono il fluente sintassi di associazione Ninject rendendo il metodo Bind<T>() disponibili nell'ambito della classe. Questi moduli vengono poi passati al kernel Ninject quando il kernel viene istanziata:

var kernel = new StandardKernel(new ApplicationModule()); 

Il Load() metodo di ogni modulo passata al kernel verranno chiamati e le definizioni vincolanti contenute all'interno dei metodi eseguiti.

L'esempio precedente specifica NinjectModule come classe base; tuttavia, questo è specifico per la versione 2.0 di Ninject. Se si utilizza 1.x Ninject, la classe base sarà StandardModule. In entrambi i casi, il metodo di caricamento è sovrascritto e le istruzioni di binding (che sono simili in entrambe le versioni) vengono emesse lì.

Per rispondere ulteriormente la vostra domanda:

  • Per Ninject 1.x, la DLL richiesto è ninject.core.dll e lo spazio dei nomi che StandardModule è definita in è Ninject.Core.

  • Per Ninhect 2.0, la DLL richiesta è ninject.dll e lo spazio dei nomi in cui è impostato NinjectModule è Ninject.Modules.

In entrambi i casi, potrebbe essere necessario fare riferimento a più spazi dei nomi a seconda di come complesso sue dichiarazioni vincolanti ottenere - ad esempio se si utilizza attacchi contestuali o entità le associazioni, ecc Nel caso di Ninject 1.x, potrebbe anche essere necessario fare riferimento a Ninject.Conditions.dll per questi casi più complessi.

Non è necessario fare riferimento a Castle.Core a meno che non si utilizzi la funzione di intercettazione di Ninject, che è una caratteristica di base 1.x ma un'estensione nella versione 2.0.

Spero che questo aiuti.

+0

Grazie. Posso solo sbatterti una volta e selezionare questa come la risposta giusta Vorrei poter fare di più. Ho faticato per tutto il pomeriggio. C'è una documentazione su come tutto è appeso insieme ma ho faticato a trovare qualcosa per il mio scenario. Altri tutorial su come iniziare sembravano mancare quando sono andato al risultato della ricerca. – uriDium

+0

Ehi, nessun problema! Mi è capitato di usare Ninject un bel po 'e ho faticato a lungo quando stavo confrontando tutti i contenitori IoC là fuori. Sono contento di poterti aiutare. –

0

Provare ad accedere alle proprietà del progetto (fare clic con il tasto destro del mouse sul progetto e fare clic su Proprietà) e reindirizzare la propria applicazione console su .Net Framework 3.5, potrebbe essere qualcosa come ".Net Framework 3.5 Client Profile" al momento. Ho avuto lo stesso problema in passato in cui gli assembly non farebbero riferimento correttamente.

Spero che questo sia il problema e che questo aiuti.

+0

Ciao. Ho avuto una rapida occhiata ma non era così. Grazie comunque. – uriDium

Problemi correlati