windsor tutorial c# inversion-of-control castle-windsor

castle windsor c# tutorial



¿Qué son los "tipos reenviados" en el contexto del registro de componentes de Castle Windsor? (1)

Los tipos reenviados le permiten tener más de un servicio implementado por una única implementación, para un ejemplo concreto, digamos que tenemos dos interfaces para trabajar con nodos de árbol de algún tipo:

public interface INodeAlterationProvider { ... } public interface IChildNodeListProvider { ... }

Y varios componentes toman una dependencia en una o ambas interfaces. Sin embargo, al implementar cada una de esas interfaces, descubres que hay una gran cantidad de funcionalidades compartidas y deseas fusionar las implementaciones en una sola clase, junto con algunas otras características como, por ejemplo:

public class NodeFactory : INodeAlterationProvider, IChildNodeListProvider { ... }

Puede registrar dos instancias de NodeFactory, una para cada servicio que implementan:

container.Register(Component.For<INodeAlterationProvider>().ImplementedBy<NodeFactory>()); container.Register(Component.For<IChildNodeListProvider>().ImplementedBy<NodeFactory>());

Pero esto podría significar que existen dos instancias únicas de NodeFactory, no es ideal, especialmente si es costoso de construir, y puede dificultar la comprensión de la depuración, especialmente si se implementaron más de dos interfaces.

Aquí es donde intervienen los tipos reenviados, lo que le permite reenviar múltiples servicios a la misma implementación, he aquí un ejemplo de cómo hacerlo:

container.Register(Component.For<INodeAlterationProvider>().Forward<IChildNodeListProvider>().ImplementedBy<NodeFactory>());

Nota: el código de registro del componente que se muestra aquí solo está disponible en el enlace troncal.

Como dice el sujeto, ¡realmente! ¿Qué hacen?