2009-10-06 60 views
1

我似乎有一個問題 - 相當意外;所以我想我可能會做一些愚蠢/錯誤的事情。Autofac組件註冊/解決錯誤?

我註冊兩個集裝箱範圍的服務,例如:

builder.Register<IServiceInfo>(c => CreateServiceInfo(c)).As<IServiceInfo>(); 
builder.Register<IServiceInfo>(c => CreateServiceInfoSomeOther(c)).As<IServiceInfo>().Named("someOther"); 

現在,當我嘗試解決

container.Resolve<IServiceInfo>() 
and container.Resolve<IServiceInfo>("someOther") 

我得到相同的實例。我期望第一次調用返回第一個實例,第二次調用返回第二個實例。爲什麼這樣發生?

我希望在這裏有一些活躍的Autofac專家,我​​很感激任何幫助來快速解決這個問題。

謝謝,所有!

+0

感謝菲利普的編輯。 – 2009-10-06 21:48:45

回答

2

當註冊兩個服務時,最後一個服務獲勝(第二個服務被命名,它仍然是該服務的註冊並不重要),除非您按名稱請求實例。

您可以使用「.DefaultOnly()」來修改您的第二次註冊,以便第一次是實際的默認值。有關更多信息,請參見wiki page

+0

太棒了,那個伎倆。萬分感謝! – 2009-10-06 22:15:19

+0

我想發表評論,但我沒有足夠的聲望來這樣做。這個答案非常有幫助,特別是因爲我在任何地方都找不到任何舊版Autofac版本的文檔! 任何使用此解決方案的人都應該注意,它將停止使用IContainer.ResolveOptional (name)方法的指定註冊。您將不得不使用.Resolve (name)方法並將其包裝在try/catch塊中。 – oligofren 2016-04-20 09:29:26