private IHandler CreateHandler(ComponentModel model)
        {
            if (model.RequiresGenericArguments)
            {
                var matchingStrategy = (IGenericImplementationMatchingStrategy)model.ExtendedProperties[ComponentModel.GenericImplementationMatchingStrategy];
                return(new DefaultGenericHandler(model, matchingStrategy));
            }
            var resolveExtensions = model.ResolveExtensions(false);
            var releaseExtensions = model.ReleaseExtensions(false);

            if (releaseExtensions == null && resolveExtensions == null)
            {
                return(new DefaultHandler(model));
            }
            return(new ExtendedHandler(model, resolveExtensions, releaseExtensions));
        }
        private IHandler CreateHandler(ComponentModel model)
        {
            if (model.RequiresGenericArguments)
            {
                var matchingStrategy = GenericImplementationMatchingStrategy(model);
                var serviceStrategy  = GenericServiceStrategy(model);
                return(new DefaultGenericHandler(model, matchingStrategy, serviceStrategy));
            }

            // meta descriptors only apply to open generic handlers so we cam safely let go of them, save some memory
            ComponentModelDescriptorUtil.RemoveMetaDescriptors(model);

            var resolveExtensions = model.ResolveExtensions(false);
            var releaseExtensions = model.ReleaseExtensions(false);

            if (releaseExtensions == null && resolveExtensions == null)
            {
                return(new DefaultHandler(model));
            }
            return(new ExtendedHandler(model, resolveExtensions, releaseExtensions));
        }