1

我有一个 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

这是在温莎的注册

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

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

4

1 回答 1

2

你想附加到Kernel.ComponentModelCreated。然后,此代码将为您工作:

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

这有点类似于这个问题

于 2014-08-14T13:58:51.560 回答