using System.Collections.Generic;
using Autofac.Core.Registration;
public static void Main()
var builder = new ContainerBuilder();
builder.RegisterModule<TestModule>();
var container = builder.Build();
var singleton = container.ResolveNamed<IMotor>("myMotor");
var composite = container.Resolve<IComposite>();
Console.WriteLine(singleton.B == composite);
Console.WriteLine(singleton == composite.A);
public class TestModule:Module{
protected override void Load(ContainerBuilder builder)
builder.RegisterType<A>()
.Named<IMotor>("myMotor")
builder.RegisterType<A>()
.Named<IMotor>("myMotor2")
builder.RegisterType<B>()
protected override void AttachToComponentRegistration(
IComponentRegistryBuilder componentRegistry,
IComponentRegistration registration)
if(registration.Activator.LimitType == typeof(B)){
registration.Activated += (_, e) => {
var a = e.Context.Resolve<IEnumerable<IIdentifiable>>();
Console.WriteLine(a.Count());
(e.Instance as IComposite).A = a.First();
public interface IMotor : IIdentifiable {
public interface IIdentifiable {}
public IComposite B {get;}
public A(IComposite composite){
public interface IComposite{
IIdentifiable A {get;set;}
public class B: IComposite
public IIdentifiable A {get; set;}