2011-09-29 18 views
7

Creo que lo que estoy buscando es algo muy simple, pero no puedo encontrar ningún ejemplo. Me gustaría utilizar Ninject para crear un objeto al tener Ninject llamar a un método de fábrica con un parámetro especificado y no inyectada durante la solicitud real a una instancia del objeto:Interfaz de enlace a través de ToMethod a un método con un parámetro

Solicitud de un objeto aquí:

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

Y me gustaría asignar el ISomeInterface a un método que espera que se le pase un valor en tiempo de ejecución.

Registro de una interfaz aquí:

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

Es esto posible? Si es así, ¿cómo mapeo correctamente mi interfaz? Gracias!

Respuesta

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

embargo, usted debe reconsiderar su diseño para evitar llamar Get de cualquier otro lugar que no sea su raíz compuesta.

+0

Gracias por la respuesta! Desafortunadamente, el código no se compila. Y sí, estoy planeando llamar al método de fábrica desde las raíces compuestas ... existe una jerarquía de herencia para ellas (ya que hay muchas) y tengo una sola fábrica para que todos puedan usar – Igorek

+0

el compilador tiene problemas convirtiendo entre el objeto Parameter y mi objeto IDataContext esa función Create() toma – Igorek

+0

Sry I forgott para agregar .GetValue() respuesta actualizada –

Cuestiones relacionadas