IKernel
The IKernel interface exposes all the functionality
              the MicroKernel implements.
            
                using Castle.Core.Internal;
using Castle.MicroKernel.Registration;
using Castle.MicroKernel.SubSystems.Configuration;
using System;
namespace Castle.MicroKernel
{
    public interface IKernel : IKernelEvents, IDisposable
    {
        IComponentModelBuilder ComponentModelBuilder { get; }
        IConfigurationStore ConfigurationStore { get; set; }
        GraphNode[] GraphNodes { get; }
        IHandlerFactory HandlerFactory { get; }
        IKernel Parent { get; set; }
        IProxyFactory ProxyFactory { get; set; }
        IReleasePolicy ReleasePolicy { get; set; }
        IDependencyResolver Resolver { get; }
        void AddChildKernel(IKernel kernel);
        IKernel AddFacility(IFacility facility);
        IKernel AddFacility<T>() where T : IFacility, new;
        IKernel AddFacility<T>(Action<T> onCreate) where T : IFacility, new;
        void AddHandlerSelector(IHandlerSelector selector);
        void AddHandlersFilter(IHandlersFilter filter);
        void AddSubSystem(string name, ISubSystem subsystem);
        IHandler[] GetAssignableHandlers(Type service);
        IFacility[] GetFacilities();
        IHandler GetHandler(string name);
        IHandler GetHandler(Type service);
        IHandler[] GetHandlers();
        IHandler[] GetHandlers(Type service);
        ISubSystem GetSubSystem(string name);
        bool HasComponent(string name);
        bool HasComponent(Type service);
        IKernel Register(params IRegistration[] registrations);
        void ReleaseComponent(object instance);
        void RemoveChildKernel(IKernel kernel);
        object Resolve(Type service);
        object Resolve(Type service, Arguments arguments);
        object Resolve(string key, Type service);
        T Resolve<T>(Arguments arguments);
        T Resolve<T>();
        T Resolve<T>(string key);
        T Resolve<T>(string key, Arguments arguments);
        object Resolve(string key, Type service, Arguments arguments);
        Array ResolveAll(Type service);
        Array ResolveAll(Type service, Arguments arguments);
        TService[] ResolveAll<TService>();
        TService[] ResolveAll<TService>(Arguments arguments);
    }
}