Замок-Виндзор: переписать компонент в будущем - PullRequest
0 голосов
/ 04 марта 2010

У меня есть следующий вариант использования:

Я хочу зарегистрировать все компоненты, общие для всех конфигураций приложения. Затем я хотел бы зарегистрировать серию динамически настраиваемых «плагинов», которые выражаются в виде пользовательских реализаций IRegistration.

Только тогда я могу разрешить начальную точку приложения.

Одна из вещей, которую я хотел бы, чтобы плагин сделал, это переписать реализацию сервиса. Примерно так:

public class SomePlugin {
  public void Register(IKernel kernel) {
    kernel.RemoveComponent(typeof(DefaultServiceImplementation).FullName);
    kernel.Register(
            Component.For<IService>()
              .ImplementedBy<AlternateServiceImplementation>())
  }
}

Однако это не работает, если какой-либо из уже зарегистрированных компонентов зависит от IService.

Я знаю, что сначала могу зарегистрировать плагины, но это ограничивает некоторые другие причины. Как я могу выполнить свое конкретное требование?

Лучшее, что я могу придумать, это что-то вроде

kernel.ResolvingComponent += (model, a, b) => {
  if(model.Service == typeof(IService))
    model.Implementation = typeof(AlternateServiceImplementation);
}

Я думаю, это может работать в некоторых ограниченных сценариях, но это далеко от идеала.

1 Ответ

3 голосов
/ 04 марта 2010

Джордж,

Я считаю, что вы ищете IHandlerSelector .

...