private object GetImplementation(DependencyImplementation implementation)
        {
            object resolved;

            if (configuration.lifetimeSettings[implementation.Implementation])
            {
                if (configuration.objectContainer[implementation.Implementation].instance == null)
                {
                    lock (configuration.objectContainer[implementation.Implementation].syncRoot)
                    {
                        if (configuration.objectContainer[implementation.Implementation].instance == null)
                        {
                            configuration.objectContainer[implementation.Implementation].instance = GetInstance(implementation.Implementation);
                        }
                    }
                }

                resolved = configuration.objectContainer[implementation.Implementation].instance;
            }
            else
            {
                resolved = GetInstance(implementation.Implementation);
            }

            return(resolved);
        }
        private TDependency GetGenericTypeImplementation <TDependency>(Type tDependency, DependencyImplementation implementation)
        {
            var genericType = implementation.Implementation.MakeGenericType(tDependency.GetGenericArguments());
            var resolved    = (TDependency)GetInstance(genericType);

            return(resolved);
        }