2011-09-28 16 views
5

Estoy seguro de que esta es una pregunta estúpida, ya que estoy suponiendo que la respuesta es "Cuando el objeto es instanciado por Ninject" ... pero quiero volver a comprobar ...¿Cuándo se activa el Activador de Ninject?

Para dar un poco más de contexto como a por qué estoy haciendo la pregunta, tengo una aplicación asp mvc que implementa NinjectHttpApplication. Sin embargo, dentro de la anulación de OnApplicationStarted necesito activar un método en una instancia de singleton que esté enlazada dentro de Ninject.

El problema es que el Kernel está expuesto, pero no debe utilizarse como un localizador de servicios, por lo que podría recuperar el objeto y llamar a DoSomeSetup(); método, pero parece un fracaso. Que yo sepa, la instancia de NinjectHttpApplication no es DI porque el archivo Global.asax la usa directamente, así que no pude ingresarla a la aplicación de esa manera.

Esto me deja con otra opción que sería agregar OnActivation (x => x.DoSomeSetup()); llamar al enlace, sin embargo, este objeto solo se usa en ciertos lugares, por lo que no es como la primera vez que carga una página, el controlador lo requerirá, por lo que si OnActivation espera a que se cree la primera instancia, puede que no suceda. Un rato.

Con suerte eso no es demasiado confuso :)

Respuesta

2

Si tu la Asunción es correcta (o al menos en su mayoría correcto). Las acciones de activación se ejecutan la primera vez que se resuelve una instancia incluso si no es creada por Ninject (por ejemplo, Constantes)

Para HttpApplication, puede utilizar la inyección de propiedad por cierto.

+0

¿Podría dar un ejemplo rápido de inyección de propiedad en NinjectHttpApplication? Solo para asegurarme de que te entiendo correctamente. – Grofit

+0

Agregue una propiedad pública con un colocador y agregue el atributo [Inyectar]. –

Cuestiones relacionadas