2011-11-23 11 views
6

Estoy intentando reproducir la siguiente sintaxis Ninject en la unidad, pero no teniendo ninguna suerte:equivalente Unidad de Bind.ToMethod de Ninject de IPrincipal, IIdentity

Bind<IIdentity>().ToMethod(c => HttpContext.Current.User.Identity); 

Estoy pensando que debería ser algo como :

IUnityContainer container; 
... 
container.RegisterType<IIdentity>(HttpContext.Current.User.Identity); 

¿Cómo debería ser?

Respuesta

11

Mientras que la respuesta neontapir's podría funcionar, ese método de extensión es obsoleto. La forma correcta de hacer esto ahora sería el uso de un InjectionFactory:

container.RegisterType<IIdentity>(new InjectionFactory(u => HttpContext.Current.User.Identity)); 
+0

Gracias por la actualización – neontapir

+0

Gracias BFree. Esto es exactamente lo que necesitaba. – Alfred

1
container.RegisterInstance<IIdentity>(...); 
+1

esto no funcionaría, ya que podría capturar la instancia actual de User.Identity, y siempre volver eso. El OP desea que ** UserIdentity ** se evalúe ** cada vez que se solicita al contenedor que resuelva un IIdentity. – BFree

+0

Es cierto. Si se requiere la semántica exacta, entonces su respuesta es obviamente más cercana a esto. –

+1

HttpContext.Current.User.Identity no está disponible cuando se inicializa el contenedor, por lo que sí quería que se evaluara cada vez. – Alfred

0

Creo que un static factory extension lo haría. Estoy oxidado en la Unidad. La inyección de dependencia de Seeman en .NET es un buen recurso para situaciones como esta.

Cuestiones relacionadas