/// <summary>
        /// Process the specified <seealso cref="ServiceRegistration"/> for the types in all assemblies.
        /// </summary>
        /// <param name="serviceRegistration">Instance of <see cref="ServiceRegistration"/> to use.</param>
        public void AutoRegister(ServiceRegistration serviceRegistration)
        {
            if (serviceRegistration == null ||
                !serviceRegistration.IsValid()) return;

            lock (_lock) {
                var assemblies = GetAssemblies();
                var registration = serviceRegistration.RegistrationHandler;
                var serviceType = serviceRegistration.ServiceType;
                var typeFilter = serviceRegistration.TypeFilter;

                foreach (Assembly assembly in assemblies) {
                    try {
                        var registrationTypes = assembly.GetTypes()
                            .Where(matchedType => typeFilter(matchedType, serviceType));

                        foreach (Type type in registrationTypes) {
                            registration(ServiceLocator, type);
                        }
                    } catch (ReflectionTypeLoadException loadException) {
                        string assemblyName = assembly.FullName;
                        string detailedMessage = loadException.GetDetailedMessage(assemblyName);

                        throw new DependencyResolutionException(assemblyName, detailedMessage);
                    }
                }
            }
        }
        public void Can_Add_Valid_Registration_To_List() {
            var registration = new ServiceRegistration();
            var list = new AutoRegistrationList {registration, registration};

            Assert.IsNotEmpty(list.ToList());
            Assert.AreEqual(list.Count(), 2);
        }
        public void Registration_With_RegistrationHandler_Only_Is_Invalid() {
            var instance = new ServiceRegistration
            {
                RegistrationHandler = (locator, type) => { }
            };

            Assert.IsFalse(instance.IsValid());
        }
        public void Registration_With_All_Properties_Is_Valid() {
            var instance = new ServiceRegistration
            {
                ServiceType = typeof(object),
                RegistrationHandler = (locator, type) => { },
                TypeFilter = (service, reg) => false
            };

            Assert.IsTrue(instance.IsValid());
        }
        public void Registration_With_TypeFilter_Only_Is_Invalid()
        {
            var instance = new ServiceRegistration { TypeFilter = (service, reg) => false };

            Assert.IsFalse(instance.IsValid());
        }
        public void Registration_With_ServiceType_Only_Is_Invalid()
        {
            var instance = new ServiceRegistration { ServiceType = typeof(object) };

            Assert.IsFalse(instance.IsValid());
        }
 public void New_Instance_Is_Invalid()
 {
     var instance = new ServiceRegistration();
     Assert.IsFalse(instance.IsValid());
 }
 public void Can_Create_Valid_Instance()
 {
     var instance = new ServiceRegistration();
     Assert.IsNotNull(instance);
 }
 public void AutoRegister(ServiceRegistration serviceRegistration)
 {
     if (serviceRegistration.ServiceType == typeof (ILazySetup))
     {
         serviceLocator.Register<ILazySetup, StructureMapLazySetup>("StructureMap");
         serviceLocator.Register<ILazySetup, UnityLazySetup>("Unity");
         serviceLocator.Register<ILazySetup, NinjectLazySetup>("Ninject");
         serviceLocator.Register<ILazySetup, WindsorLazySetup>("Windsor");
     }
 }