2008-10-13 7 views

Respuesta

16

tipos reenviados permitirá tener más de un servicio implementado por una sola aplicación, para un ejemplo concreto decir que tenemos dos interfaces para trabajar con los nodos del árbol de algún tipo:

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

y varios componentes de tomar una dependencia en una o ambas de esas interfaces. Sin embargo en la ejecución de cada una de esas interfaces descubre que su es una gran cantidad de funcionalidad compartida y desea combinar las implementaciones en una sola clase, junto con algunas otras características decir como:

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

Se podría registrar dos casos de NodeFactory, uno por cada servicio que implementan:

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

Pero esto podría significar dos casos simples de NodeFactory existir - no es ideal, especialmente si es costoso de construir - y puede hacer que la depuración etc más difícil de entender, especialmente si había más de dos interfaces siendo implementadas.

Esto es donde los tipos remitidos intervienen, lo que le permite reenviar múltiples servicios a la misma aplicación, he aquí un ejemplo de hacer eso:

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

Nota: el código de registro de componentes que se muestra aquí sólo está disponible en el tronco .

+0

Gracias, eso explica de qué se trata. Sin embargo, en base a eso, huele como un atajo para no hacer una refactorización "adecuada" para fusionar los dos servicios ... –

+1

Bien podría ser un olor en el ejemplo que proporcioné, se me ocurrió por un momento ... un ejemplo más probable podría ser algo así como un IExtendedLoggerFactory que amplíe ILoggerFactory y esté implementado por una sola clase que satisfaga ambas interfaces. – Bittercoder

+0

Ah; sí, está bien, puedo ver eso. Estuve en la charla de Mike Hadlow en IoC/Windsor anoche y descubrí algunas cosas sobre el maletero allí también :) –

Cuestiones relacionadas