2011-09-29 13 views
7

Penso che quello che sto cercando sia qualcosa di molto semplice, ma non riesco a trovare alcun esempio. Mi piacerebbe usare Ninject per creare un oggetto da avere Ninject chiamare un metodo factory con un parametro specificato e non per iniezione durante la richiesta effettiva per creare un'istanza dell'oggetto:Interfaccia di binding tramite ToMethod a un metodo con un parametro

Richiesta di un oggetto qui:

StandardKernel.Get<ISomeInteface>(new Ninject.Parameters.Parameter("dataContext", dataContext, true)); 

E mi piacerebbe mappare ISomeInterface ad un metodo che si aspetta un valore da passare ad esso in fase di runtime.

Mappatura un'interfaccia qui:

Kernel.Bind<ISomeInterface>().ToMethod(SomeObject.Create(--> `what do I put here?`)); 

è possibile? In tal caso, come faccio a mappare correttamente la mia interfaccia? Grazie!

risposta

6
ToMethod(ctx => 
    SomeObject.Create(
     (IDataContext)ctx.Parameters.Single(p =>p.Name == "dataContext") 
     .GetValue(ctx, null)) 

Ma si dovrebbe ripensare la progettazione per evitare di chiamare Get da qualsiasi altro che la vostra principale composito.

+0

Grazie per la risposta! Sfortunatamente, il codice non viene compilato. E sì, sto pianificando di chiamare il metodo factory dalle radici composite .. c'è una gerarchia di ereditarietà per quelle (dato che ce ne sono molte) e ho una singola factory per tutte loro per usare – Igorek

+0

il compilatore sta avendo problemi la conversione tra oggetto Parametro e oggetto IDataContext che la funzione Create() richiede – Igorek

+0

Sry Ho dimenticato di aggiungere .GetValue() risposta aggiornata –

Problemi correlati