2009-10-06 61 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