PreserveExistingDefaults 的用途?

Uses of PreserveExistingDefaults?

我们为什么以及何时应该在 autofac 注册期间使用 PreserveExistingDefaults?

我已经阅读了它在 Autoface 文档中的用法: http://docs.autofac.org/en/latest/register/registration.html

但我的问题是,什么时候我们会用单一接口注册多个实现。

谁能给出一些实时的例子。

当您想注册一个新的实现而不更改默认实现时,可以使用它。当您为单个接口注册多个注册时,Autofac 将在您尝试注册 IEnumerable<IService>

时解析所有这些注册

假设您有 2 个 IService

的实现
interface IService { }
class Service1 : IService { }
class Service2 : IService { }

如果您这样注册它们:

ContainerBuilder builder = new ContainerBuilder();
builder.RegisterType<Service1>().As<IService>();
builder.RegisterType<Service2>().As<IService>().PreserveExistingDefaults();

IContainer container = builder.Build();

IService service = container.Resolve<IService>();  // will be Service1

List<IService> services = container.Resolve<IEnumerable<IService>>().ToList();
services[0]; // => Service1 
services[1]; // => Service2 or the opposite, there is no warranty on the order

当你解决IService时,你将获得Service1,但当你解决IEnumerable<IService>

时,你将同时解决这两个问题

顺便说一句,用起来真的很特别。我不记得曾经用过它。使用 Named and Keyed services

总是更简单