Добавление вперед с помощью 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));
}
}
Это несколько похоже на этот вопрос.