У меня есть следующий вариант использования:
Я хочу зарегистрировать все компоненты, общие для всех конфигураций приложения. Затем я хотел бы зарегистрировать серию динамически настраиваемых «плагинов», которые выражаются в виде пользовательских реализаций 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);
}
Я думаю, это может работать в некоторых ограниченных сценариях, но это далеко от идеала.