private static void ConfigureClass(Type type, IRegistry registry, FireOptions fireOption, DependencyMap dependencyMap)
        {
            var inst = new LooseConstructorInstance(context =>
            {
                var ctorArgs = type
                    .GetGreediestCtor()
                    .GetParameters()
                    .Select(p => context.GetInstance(p.ParameterType));

                return Notifiable.MakeForClass(type, fireOption, ctorArgs.ToArray(), new ProxyGenerator(), dependencyMap);
            });

            registry.For(type).Use(inst);
        }
        public void Process(Type type, Registry registry)
        {
            if(type.IsAbstract || type.IsEnum)
                return;

            var ctor = type.GetGreediestCtor();

            if(!ctor.HasOptionalParameters())
                return;

            var name = _namer(type);

            var instances = _registrations
                .Select(r => r(registry, type))
                .Eval()
                .Each(instance => instance.WithName(name));

            var parameters = ctor.GetOptionalParameters();

            foreach(var parameter in parameters)
            foreach(var instance in instances)
                    instance.Child(parameter.Name).Is(parameter.DefaultValue);
        }