Pregunta

Mi aplicación utiliza NHibernate con una sesión por la aplicación petición. Tengo una biblioteca central que proporciona un producto único seguro para hilos para obtener acceso a la sesión nhibernate actual.

Eso Singleton se aprovecha de la aplicación web en el BeginRequest y eventos endRequest para garantizar la apertura y cierre de la sesión con cada solicitud. Además, mi capa DataAccess utiliza el mismo producto único para realizar el acceso a datos, de manera que se aprovecha de la misma sesión nhibernate.

Ahora he añadido Ninject en la ecuación de modo que pueda inferir en tiempo de ejecución, la información contextual NHibernate, a saber, la cadena de conexión. Me gustaría cambiar un valor en mi web.config que le dice qué base de datos va a golpear. El problema es que, con el fin de hacer esto, necesito mi Singleton (mencionado anteriormente) para ser capaz de inferir una de sus propiedades, IConnectionStringProvider.

Está conectado correctamente, pero el singleton nunca tendrá una instancia propiedades, por lo tanto, todo se rompe.

Por lo tanto, a mi pregunta ... ¿cómo puedo obtener Ninject trabajar con un producto único, o cómo puedo cambiar mi aplicación para trabajar con Ninject?

¿Fue útil?

Solución

Este es un problema común que muchas personas encuentran con Singleton. Aunque no puedo comentar específicamente sobre NHibernate, echa un vistazo a de Misko artículo sobre por qué el patrón de diseño Singleton sufre del problema que usted describe. Asegúrese de leer los comentarios y artículos vinculados a averiguar qué hacer al respecto (o buscar "Adónde todos los Singleton ha ido?" En google).

Si está interesado en este tema, es posible que también desee google "Singleton-i-love-you-pero-youre-traer-me-down"

Con suerte eso ayuda un poco.

Otros consejos

Tal vez usted podría intentar enlazar el singleton a una constante igual que

Bind<ISession>().ToConstant(SessionSingleton.Instance);

Lo hago con el singleton Settings.Default del objeto de configuración (en su mayoría como un método de parche hasta que tenga tiempo para jugar realmente con mi configuración) y funciona muy bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top