Pregunta

Actualmente estoy usando Autofac, pero estoy abierto a comentarios con respecto a otros recipientes, así COI. Yo preferiría una solución utilizando Autofac si es posible. También soy un poco nuevo a la COI para que pueda ser malentendido groseramente lo que debería usar un contenedor COI para.

Básicamente, la situación es la siguiente:

Tengo un contenedor COI superior de mi aplicación. Tengo un árbol de niños contenedores / ámbitos donde te gustaría lo mismo "servicio" (iWhatever) para resolver de manera diferente dependiendo de qué nivel en el árbol que se resuelva. Por otra parte, si un servicio no está registrado en un cierto nivel en el árbol me gustaría que el árbol para ser atravesada hacia arriba hasta que se encuentre una aplicación adecuada.

Por otra parte, cuando se construye un componente dado, es muy posible que necesitaré acceso al contenedor padre / alcance. En muchos casos el componente que estoy registro tendrá una dependencia en el mismo o en un servicio diferente en un ámbito primario.

¿Hay alguna manera de expresar esta dependencia con Autofac? Algo así como:

builder.Register(c=>
{
   var parentComponent = ?.Resolve<ISomeService>();
   var childComponent = new ConcreteService(parentComponent, args...);
   return childComponent;
}).As<ISomeService>();

No puedo conseguir algo similar al pseudocódigo anterior para trabajar por varias razones:

A) Parece que todos los niveles de la proporción de árboles alcance un conjunto común de registros. Parece que no puedo encontrar una manera de hacer un registro asignado limita una cierta "alcance".

B) Me parece que no puede encontrar una manera de obtener una bodega del ámbito padre de un determinado ámbito. Me puede resolver ILifetimeScope en el recipiente y luego caso a una instancia LifetimeScope hormigón que proporciona su ámbito padre, pero supongo que es probable que note destinado a ser utilizado de esta manera. Es esto seguro?

C) No estoy seguro de cómo decir Autofac recipiente que posee el objeto resuelto. Para muchos componentes quisiera componente a ser "poseído" por el ámbito en el que se construye. Podrían etiquetados contextos ayudarme aquí? ¿Tendría que etiquetar todos los niveles del árbol con una etiqueta única? Esto sería difícil debido a que la profundidad del árbol se determina en tiempo de ejecución.

Lo siento por la pregunta extremadamente largo. En resumen:

1) ¿Hay alguna manera de hacer lo que quiero hacer uso de Autofac?

2) ¿Hay otro recipiente más adecuado para este tipo de estructura de dependencias?

3) ¿Es COI la herramienta equivocada para este conjunto?

¿Fue útil?

Solución

Autofac 1.4 es compatible con esta facilidad y es probablemente la mejor opción aquí en este momento. Usted puede simplemente registrar los componentes contenedor secundario en el contenedor secundario.

Autofac 2, que está utilizando, no tiene un equivalente simple, sin embargo, a pesar de que está siendo investigado.

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