我正在为一个开源项目做出贡献,该项目希望为其内部服务支持多个容器。支持容器的要求之一是注册顺序很重要。因此,如果一个接口的多个实现以特定顺序注册,当这些服务的列表被解析时,这些实现应该以它们注册的相同顺序返回。
var builder = new ContainerBuilder();
builder.RegisterType<PreferredService>().As<IService>();
builder.RegisterType<AlternativeService>().As<IService>();
builder.RegisterType<AdditionalService>().As<IService>();
...
// Get the first (preferred) implementation of IService.
var possibleServices = container.Resolve<IEnumerable<IService>>();
IService idealServiceImplementation = possibleServices.FirstOrDefault();
我的测试表明 Autofac 返回的服务是相反的顺序。总是这样吗?我可以相信他们每次都会以相反的顺序解决吗?即使我在为不同的接口进行其他注册之后注册了一些后来的服务,这种行为是否会保持一致?我可以拦截对列表的 Resolve 的隐式调用吗?
有没有办法指示 Autofac 注册顺序很重要?