加入windsor设施

时间:2014-08-14 13:13:14

标签: c# castle-windsor windsor-facilities

我有一个windsor工具,我需要使用它来向注册组件添加转发。出于某种原因,我似乎无法弄清楚如何做到这一点。

我有ComponentRegistered事件限制,我可以过滤掉我需要添加额外接口的内容,但我似乎无法添加前进。这就是我在我的设施中所拥有的:

void KernelComponentRegistered(string key, IHandler handler)
{
    if (typeof(ICanDoMagic).IsAssignableFrom(handler.ComponentModel.Implementation))
    {
        // I don't know what goes here
    }
}
protected override void Init()
{
    Kernel.ComponentRegistered += KernelComponentRegistered;
}

我有以下接口和类:

public interface ICanDoMagic

public interface IBasicInterface

public class BasicClass : IBasicInterface, ICanDoMagic

这是注册windsor

container.Register(Component.For<IBasicInterface>().ImplementedBy<BasicClass>())

我想要发生的是当用户注册实现ICanDoMagic的东西时(就像我在上面的注册中那样)我想为该类注册ICanDoMagic接口,这样他们就不需要自己注册。我认为这是通过前锋完成的,但我不知道如何添加它。

1 个答案:

答案 0 :(得分:2)

您想要附加到Kernel.ComponentModelCreated。这段代码将适合您:

void KernelComponentModelCreated(ComponentModel model)
{
    if (typeof(ICanDoMagic).IsAssignableFrom(model.Implementation))
    {
        model.AddService(typeof(ICanDoMagic));
    }
}

这有点类似于this question