这个问题的根本原因是在两个不同的地方指定了SingleInstance。解决方案是将一个位置的SingleInstance删除,使其只在一个位置指定。以下代码示例演示了如何使用Autofac RegisterAssemblyTypes以及RegisterType,同时在单个位置指定SingleInstance。
var containerBuilder = new ContainerBuilder();
containerBuilder.RegisterType().As().SingleInstance();
// Register types from assembly
containerBuilder.RegisterAssemblyTypes(assemblyToScan).AsImplementedInterfaces()
.SingleInstance();
IContainer container = containerBuilder.Build();
在上面的代码示例中,IMyService的实现类MyService被注册为单例。然后使用RegisterAssemblyTypes从程序集中注册其它类型并指定SingleInstance。这是唯一的位置指定SingleInstance,这样就避免了实例化同一个实现两次的问题。