Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class HandlerForwardingFacility : AbstractFacility
- {
- IConversionManager conversionManager;
- protected override void Init()
- {
- conversionManager = (IConversionManager)Kernel.GetSubSystem(SubSystemConstants.ConversionManagerKey);
- Kernel.HandlerRegistered += new HandlerDelegate(Kernel_HandlerRegistered);
- }
- void Kernel_HandlerRegistered(IHandler handler, ref bool stateChanged)
- {
- if (handler is ForwardingHandler) return;
- var model = handler.ComponentModel;
- if (model.Configuration == null) return;
- var forward = model.Configuration.Children["forward"];
- if (forward == null) return;
- foreach (var service in forward.Children)
- {
- Type forwardedType = (Type)conversionManager.PerformConversion(service, typeof (Type));
- Kernel.RegisterHandlerForwarding(forwardedType, model.Name);
- }
- }
- }
- public interface IDog
- {
- void Bark();
- }
- public interface IDuck
- {
- void Quack();
- }
- public class Mutant : IDog, IDuck
- {
- public void Bark()
- {
- Console.WriteLine("Bark");
- }
- public void Quack()
- {
- Console.WriteLine("Quack");
- }
- }
- <castle>
- <facilities>
- <facility id="facility.handlerForwarding" type="Example.Facilities.HandlerForwardingFacility, Example" />
- </facilities>
- <components>
- <component id="mutant" service="Example.IDog, Example" type="Example.Mutant, Example">
- <forward>
- <service>Example.IDuck, Example</service>
- </forward>
- </component>
- </components>
- </castle>
- WindsorContainer container = new WindsorContainer(new XmlInterpreter());
- var dog = container.Resolve<IDog>();
- var duck = container.Resolve<IDuck>();
- Assert.AreSame(dog, duck);
Add Comment
Please, Sign In to add comment