我正在爲一個開放源代碼項目做出貢獻,該項目正在尋求支持多個容器來實現其內部服務。支持容器的要求之一是註冊順序很重要。因此,如果某個接口的多個實現以特定的順序註冊,那麼當解析這些服務的列表時,實現應該按照它們註冊的順序返回。Autofac能否按照他們註冊的順序返回一個類型的所有服務?
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返回的服務是反向順序。情況總是如此嗎?我能相信他們每次都會以相反的順序解決嗎?即使我在爲其他接口註冊了一些後續服務之後,這種行爲是否一致?我可以攔截隱式調用來解析列表嗎?
有沒有辦法指示Autofac註冊順序很重要?
更新了問題以包含處理這些列表的隱式依賴關係。 – ventaur
我不認爲Autofac的意圖是以這種方式使用它或以這種方式依賴它。所以,不要依賴它。 – slimflem