private static void Register(this ContainerBuilder builder, Registration registration)
 {
     if (registration.ImplementationType != null)
     {
         builder.RegisterType(registration.ImplementationType).As(registration.InterfaceType);
     }
     else if (registration.ImplementationFactory != null)
     {
         builder.Register(ctx => registration.ImplementationFactory()).As(registration.InterfaceType);
     }
     else
     {
         var message = "No type or factory found on registration " + registration.GetType().FullName;
         Logger.Error(message);
         throw new InvalidOperationException(message);
     }
 }
 private static void Register(this ContainerBuilder builder, Registration registration, string name = null)
 {
     if (registration.Instance != null)
     {
         var reg = builder.Register(ctx => registration.Instance).SingleInstance();
         if (name != null)
         {
             reg.Named(name, registration.DependencyType);
         }
         else
         {
             reg.As(registration.DependencyType);
         }
     }
     else if (registration.Type != null)
     {
         var reg = builder.RegisterType(registration.Type);
         if (name != null)
         {
             reg.Named(name, registration.DependencyType);
         }
         else
         {
             reg.As(registration.DependencyType);
         }
     }
     else if (registration.Factory != null)
     {
         var reg = builder.Register(ctx => registration.Factory(new AutofacDependencyResolver(ctx)));
         if (name != null)
         {
             reg.Named(name, registration.DependencyType);
         }
         else
         {
             reg.As(registration.DependencyType);
         }
     }
     else
     {
         var message = "No type or factory found on registration " + registration.GetType().FullName;
         Logger.Error(message);
         throw new InvalidOperationException(message);
     }
 }