Comment accéder à Ninject.Kernel sans utiliser le modèle Service Locator

J'ai lu des dizaines de messages de ce sujet, sans trouver une ligne directrice claire de la façon d'accéder à la Ninject.Noyau sans l'aide du Localisateur de Service modèle.

Actuellement j'ai de la suite dans les classes qui ont besoin d'utiliser CustomerBusiness (ce qui est mon service) et il fonctionne très bien, mais je suis bien conscient qu'il n'est pas recommandé de le faire.

private CustomerBusiness _customerBusiness;

private ICustomerRepository CustomerRepository
{
    get { return NinjectWebCommon.Kernel.Get<IAccountRepository>(); }
}

private CustomerBusiness CustomerBusiness
{
    get
    {
        if (_customerBusiness == null)
        {
            _customerBusiness = new CustomerBusiness(AccountRepository);
        }

        return _customerBusiness;
    }
}

public Customer GetCustomer(int id)
{
    return CustomerBusiness.GetCustomer(id);
}

C'est le Noyau de la propriété accessible dans le code ci-dessus:

public static IKernel Kernel
{
    get
    {
        return CreateKernel();
    }
}

J'ai lu de nombreuses suggestions sur l'utilisation d'une usine, mais aucun d'entre eux expliquent comment utilisation de cette usine. J'apprécierais vraiment si quelqu'un pouvait me montrer la "CustomerFactory" ou toute autre approche recommandée y compris comment utilisation.

Mise à jour

Je suis en utilisant ASP.NET des Formulaires Web et vous devez avoir accès CustomerBusiness de Code-behind.

Solution

La dernière solution que j'ai trouvé de travail, a été la réponse avec le plus de votes trouvé à ce post:
Comment puis-je mettre en œuvre Ninject ou DI sur asp.net Formulaires Web?

Il ressemble à ceci (Notez l'héritage de PageBase, qui fait partie de Ninject.Le Web, c'est la clé!):

public partial class Edit : PageBase
{
    [Inject]
    public ICustomerBusiness CustomerBusiness { get; set; }
    ...

Accepté la réponse ci-dessous, indirectement, conduis-moi à trouver cette solution.

source d'informationauteur Niels Brinch