public void Configure(IComponentRegistry container, SerializationContractRegistry types) { _scanner.Constrain(_hint); var mappings = _scanner.Build(_hint.ConsumerTypeDefinition); var messageTypes = mappings .Select(m => m.Message) .Where(m => !m.IsAbstract) .Distinct(); types.AddRange(messageTypes); var builder = new MessageDirectoryBuilder(mappings); var provider = _contextManager.GetContextProvider(); var consumers = mappings .Select(x => x.Consumer) .Where(x => !x.IsAbstract) .Distinct() .ToArray(); var cb = new ContainerBuilder(); foreach (var consumer in consumers) { cb.RegisterType(consumer); } cb.RegisterInstance(provider).AsSelf(); cb.Update(container); container.Register <IMessageDispatchStrategy>(c => { var scope = c.Resolve <ILifetimeScope>(); var tx = Factory(TransactionScopeOption.RequiresNew); return(new AutofacDispatchStrategy(scope, tx, _hint.Lookup, _contextManager)); }); container.Register(builder); }