Добавление вперед с помощью Windsor

У меня есть средство 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 для этого класса, чтобы им не нужно было регистрировать его самостоятельно. Я думаю, что это сделано с форвардом, но я не знаю, как его добавить.

1 ответ

Решение

Вы хотите прикрепить к Kernel.ComponentModelCreated вместо. Этот код будет работать для вас:

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

Это несколько похоже на этот вопрос.

Другие вопросы по тегам