为什么以及何时应该在autofac注册期间使用PreserveExistingDefaults?
我已经阅读了它使用Autoface docs的表单: http://docs.autofac.org/en/latest/register/registration.html
但我的问题是,在什么情况下我们会用单一界面注册多个实现。
任何人都可以实时提供一些例子。
答案 0 :(得分:2)
当您想要注册新实现而不更改默认实现时,可以使用它。当您为单个界面注册多个注册时,当您尝试注册IEnumerable<IService>
假设您有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
解决Service1
后,您将获得IService
,但解决IEnumerable<IService>
时将解决这两个问题
顺便说一下,使用它真的很特别。我不记得曾经用过它。使用Named and Keyed services
总是更简单