2012-02-29 21 views
5

Tengo una necesidad de apuntar a un método en enlaces Ninject como parte de un argumento de constructor. El constructor de la clase es el siguiente:Ninject Pass Delegate en WithConstructorArgument

MyObject(Func<Populator> param1, TimeSpan time) 

he estado buscando y no han sido capaces de encontrar una manera de obligar a la delegada de la Func. ¿Esto es posible? Ninject no me deja hacer esto porque espera un objeto como argumento y no tomará un delegado.

Bind<IInterface>() 
     .To<MyObject>() 
     .InSingletonScope() 
     .WithConstructorArgument 
      ("param1", ctx => ctx.Kernel.Get<OtherWiredObject>().PopMethod) 
     .WithConstructorArgument 
      ("time", new TimeSpan(0,30,0)); 

¿Hay alguna forma de que este comportamiento funcione en Ninject?

+1

que sobrecargar parece ser una función de devolución de llamada. ¿Qué pasaría si hiciera '() => Kernel.Get (). PopMethod'? – dotjoe

+0

Sin dados, lo conecté como '() => Kernel.Get (). PopMethod' Mirando la firma del método WithConstructorArgument para esto, el Func espera que se devuelva un objeto, y tengo que devolver un Func a El parámetro. Quizás hay otra forma de evitar esto? –

+0

es 'PopMethod' una propiedad de tipo' Populator'? – dotjoe

Respuesta

3

Se puede definir una unión como esta:

Bind<Func<Populator>>().ToMethod(ctx => ctx.Kernel.Get<OtherWiredObject>().PopMethod);