我有以下用例:
我想注册应用程序的所有配置之间共享的所有组件。然后我想注册一系列动态配置的“插件”,它们表示为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);
}
我认为这可以在一些有限的情况下起作用,但它远非理想。