using System.Collections.Generic;
using System.Threading.Tasks;
public static void Main()
var serviceResolver = new MyResolver();
var autofacBuilder = new ContainerBuilder();
autofacBuilder.RegisterSource(new AutofacServiceProviderRegistrationSource(serviceResolver));
var ioc = autofacBuilder.Build();
var myService = serviceResolver.GetService(typeof(IMyService));
var myNewService = ioc.Resolve<IMyService>();
System.Console.WriteLine("Types Found!");
public class AutofacServiceProviderRegistrationSource : IRegistrationSource
private readonly MyResolver serviceProvider;
public AutofacServiceProviderRegistrationSource(MyResolver serviceProvider)
this.serviceProvider = serviceProvider;
public IEnumerable<IComponentRegistration> RegistrationsFor(Service service, Func<Service, IEnumerable<IComponentRegistration>> registrationAccessor)
var swt = service as IServiceWithType;
if (registrationAccessor(service).Any() || swt == null || !serviceProvider.SupportedServices.Any(s => s == swt.ServiceType))
return Enumerable.Empty<IComponentRegistration>();
var registration = RegistrationBuilder.ForDelegate(swt.ServiceType, (c, p) => serviceProvider.GetService(swt.ServiceType)).ExternallyOwned().CreateRegistration();
return new[] { registration };
public bool IsAdapterForIndividualComponents
public class MyResolver : IServiceProvider
private Dictionary<Type, Type> registeredTypes = new Dictionary<Type, Type>();
registeredTypes[typeof(IMyService)] = typeof(MyService);
public List<Type> SupportedServices { get { return registeredTypes.Keys.ToList(); } }
public object GetService(Type serviceType)
if (!registeredTypes.TryGetValue(serviceType, out requiredType))
return Activator.CreateInstance(requiredType);
public interface IMyService
public class MyService : IMyService