Comment pouvez-vous injecter un fournisseur d'appartenances personnalisé asp.net (MVC2) en utilisant Ninject?

StackOverflow https://stackoverflow.com/questions/2963611

Question

OK, donc je travaille sur ce pendant des heures. J'ai trouvé quelques messages ici, mais rien qui résout effectivement le problème. Alors, laissez-moi essayer à nouveau ...

J'ai une application utilisant MVC2 Ninject et un fournisseur d'appartenances personnalisé.

Si je tente de Injecter le fournisseur en utilisant le cteur, je reçois une erreur: «Aucun constructeur parameterless défini pour cet objet »

public class MyMembershipProvider : MembershipProvider
{
    IMyRepository _repository;

    public MyMembershipProvider(IMyRepository repository)
    {
        _repository = repository;
    }

J'ai aussi jouer avec les usines et initialize (), mais tout est à venir blancs.

Les pensées / exemples?

Était-ce utile?

La solution

Voici comment j'ai pu faire ceci:

1) Je créé une classe d'aide statique pour Ninject

public static class NinjectHelper
{
    public static readonly IKernel Kernel = new StandardKernel(new FooServices());

    private class FooServices : NinjectModule
    {
        public override void Load()
        {
            Bind<IFooRepository>()
                .To<EntityFooRepository>()
                .WithConstructorArgument("connectionString",
                    ConfigurationManager.ConnectionStrings["FooDb"].ConnectionString);
        }
    }
}

2) Voici mon override d'adhésion:

    public class FooMembershipProvider : MembershipProvider
    {
        private IFooRepository _FooRepository;

        public FooMembershipProvider()
        {
            NinjectHelper.Kernel.Inject(this);
        }

        [Inject]
        public IFooRepository Repository 
        { 
            set
            {
                _FooRepository = value;
            }
        }
        ...

Avec cette approche, il ne compte pas vraiment lorsque le fournisseur L'adhésion est instancié.

Autres conseils

Le modèle de fournisseur de membre ne peut instancier un fournisseur configuré quand il a un constructeur par défaut. Vous pouvez essayer cela en utilisant le modèle de service de localisation, au lieu d'utiliser l'injection de dépendance. Exemple:

public class MyMembershipProvider : MembershipProvider
{
    IMyRepository _repository;

    public MyMembershipProvider()
    {
        // This example uses the Common Service Locator as IoC facade, but
        // you can change this to call NInject directly if you wish.
        _repository = ServiceLocator.Current.GetInstance<IMyRepository>;
    }

J'ai eu le même problème au même endroit exact dans le livre. Ce ne fut que plus tard dans le livre que je remarqué qu'il y avait deux fichiers web.config séparés. J'ai d'abord placé ma clé connectionString dans le fichier web.config mal. Ce ne fut que je mis le connectionString dans le fichier web.config correct que l'erreur « aucun constructeur parameterless » est parti.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top