Ninject ligação contextual padrão

Tenho uma interface com algumas implementações concretas diferentes. Estou tentando dar ao Ninject um padrão para usar e usar somente a outra implementação se um nome corresponder. Por exemplo, eu tenho as seguintes ligações.

Bind<ISomething>().To<DefaultSomething>()
Bind<ISomething>().To<OtherSomething>().Named("55abd8b8-097f-4e1c-8d32-95cc97910604");

O que eu gostaria é que, se a seção Nome não corresponder, use a implementação DefaultSomething. Quando passo o guia explicitamente vinculado, ele funciona bem. Quando passo em qualquer outro guia, recebo a exceção "Não há ligações correspondentes disponíveis".

Bind<ISomething>().To<OtherSomething>().Named("55abd8b8-097f-4e1c-8d32-95cc97910604");
Bind<ISomething>().To<DefaultSomething>()

Bind<ISomething>().To<DefaultSomething>()
Bind<ISomething>().To<OtherSomething>().When(ctx => ctx.Service != null && ctx.Service.Name == "55abd8b8-097f-4e1c-8d32-95cc97910604");

Eu também tentei usar .Quando verificar a ligação e tentei reverter a ordem como abaixo, no entanto, nunca consigo vincular a menos que passe no Guid que é explicitamente nomead

Este artig parece indicar que as ligações padrão funcionam, então devo estar fazendo algo errado. Alguma sugestão

Edit: Aqui está um exemplo completo mostrando o problema que estou tentando resolver. O comportamento desejado é parakernel.Get<INumber>("Three").Write() para retornar"Unknown Number"

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ninject;

namespace NinjectTest
{
    interface INumber
    {
        string Write();
    }

    class UnknownNumber : INumber
    {
        public string Write()
        {
            return "Unknown Number";
        }
    }

    class One : INumber
    {
        public string Write()
        {
            return "1 = One";
        }
    }

    class Two : INumber
    {
        public string Write()
        {
            return "2 = Two";
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            StandardKernel kernel = new StandardKernel();
            kernel.Bind<INumber>().To<UnknownNumber>();
            kernel.Bind<INumber>().To<One>().Named("One");
            kernel.Bind<INumber>().To<Two>().Named("Two");

            Console.WriteLine(kernel.Get<INumber>("One").Write());
            Console.WriteLine(kernel.Get<INumber>("Two").Write());
            Console.WriteLine(kernel.Get<INumber>("Three").Write());

            Console.ReadLine();
        }
    }
}

questionAnswers(3)

yourAnswerToTheQuestion