ItemRegistration<TItem>
using System;
namespace Castle.MicroKernel.Registration.Proxy
{
    public class ItemRegistration<TItem>
    {
        private IReference<TItem> item;
        internal IReference<TItem> Item => item;
        public ItemRegistration<TItem> Instance(TItem instance)
        {
            item = new InstanceReference<TItem>(instance);
            return this;
        }
        public ItemRegistration<TItem> Service<TService>() where TService : TItem
        {
            return this.Service(typeof(TService));
        }
        public ItemRegistration<TItem> Service(Type serviceType)
        {
            item = new ComponentReference<TItem>(serviceType);
            return this;
        }
        public ItemRegistration<TItem> Service(string name)
        {
            item = new ComponentReference<TItem>(name);
            return this;
        }
    }
}