Переадресованные типы позволяют вам иметь более одной службы, реализованной в одной реализации, например, в конкретном примере у нас есть два интерфейса для работы с узлами дерева некоторого вида:
public interface INodeAlterationProvider { ... }
public interface IChildNodeListProvider { ... }
И различные компоненты зависят от одного или обоих этих интерфейсов. Однако, реализуя каждый из этих интерфейсов, вы обнаруживаете, что они представляют собой множество общих функций, и хотите объединить реализации в один класс вместе с некоторыми другими функциями, такими как:
public class NodeFactory : INodeAlterationProvider, IChildNodeListProvider { ... }
Вы можете зарегистрировать два экземпляра NodeFactory, по одному для каждой внедряемой ими службы:
container.Register(Component.For<INodeAlterationProvider>().ImplementedBy<NodeFactory>());
container.Register(Component.For<IChildNodeListProvider>().ImplementedBy<NodeFactory>());
Но это может потенциально означать, что существуют два одноэлементных экземпляра NodeFactory - не идеальный, особенно если его создание дорого - и может затруднить понимание отладки и т. Д., Особенно если реализовано более двух интерфейсов.
Здесь переадресованные типы вступают в действие, позволяя вам перенаправить несколько сервисов в одну и ту же реализацию, вот пример этого:
container.Register(Component.For<INodeAlterationProvider>().Forward<IChildNodeListProvider>().ImplementedBy<NodeFactory>());
Примечание: показанный здесь код регистрации компонента доступен только для соединительных линий.