Aucune correspondance, les liaisons sont disponibles, et le type n'est pas auto-bindable dans Ninject
Je suis en utilisant Ninjec, Ninject.Web.MVC et Ninject.Web.Commune
Lorsque je démarre mon application mvc, j'obtiens cette erreur de liaison:
Que dois-je mal dans ma liaison?
Erreur lors de l'activation DbConnection
Pas de correspondance liaisons sont disponibles, et le type n'est pas auto-liables.
Chemin d'Activation:
4) d'Injection de dépendance DbConnection en paramètre
existingConnection de constructeur de type DbContext3) d'Injection de dépendance DbContext dans le paramètre dbContext de
constructeur de type GenericRepository{Utilisateur}2) Injection de dépendance IGenericRepository{Utilisateur} en paramètre
pensions de constructeur de type HomeController1) Demande de HomeController
Suggestions:
1) vérifiez que vous avez défini une liaison pour DbConnection.
2) Si la liaison a été définie dans un module, vérifiez que le module
a été chargé dans le noyau.3) s'Assurer que vous n'avez pas accidentellement créé plus d'un noyau.
4) Si vous utilisez des arguments du constructeur, s'assurer que le paramètre
le nom correspond à l'constructeurs nom du paramètre.5) Si vous utilisez le module automatique de chargement, vérifiez le chemin de recherche
et les filtres sont corrects.
public interface IGenericRepository<T> where T : class
{
}
public class GenericRepository<T> : IGenericRepository<T> where T : class
{
public GenericRepository(TLPContext dbContext)
{
DbContext = dbContext;
}
protected TLPContext DbContext { get; private set; }
}
[assembly: WebActivator.PreApplicationStartMethod(typeof(TLP.App_Start.NinjectWebCommon), "Start")]
[assembly: WebActivator.ApplicationShutdownMethodAttribute(typeof(TLP.App_Start.NinjectWebCommon), "Stop")]
namespace TLP.App_Start
{
using Microsoft.Web.Infrastructure.DynamicModuleHelper;
using Ninject;
using Ninject.Web.Common;
using System;
using System.Web;
using TLP.DataAccess;
using TLP.DataAccess.Contract;
using TLP.DataAccess.Implementation;
public static class NinjectWebCommon
{
private static readonly Bootstrapper bootstrapper = new Bootstrapper();
public static void Start()
{
DynamicModuleUtility.RegisterModule(typeof(OnePerRequestHttpModule));
DynamicModuleUtility.RegisterModule(typeof(NinjectHttpModule));
bootstrapper.Initialize(CreateKernel);
}
public static void Stop()
{
bootstrapper.ShutDown();
}
private static IKernel CreateKernel()
{
var kernel = new StandardKernel();
kernel.Bind<Func<IKernel>>().ToMethod(ctx => () => new Bootstrapper().Kernel);
kernel.Bind<IHttpModule>().To<HttpApplicationInitializationHttpModule>();
kernel.Bind<TLPContext>();
kernel.Bind(typeof(IGenericRepository<>)).To(typeof(GenericRepository<>));
return kernel;
}
}
}
[DbModelBuilderVersion(DbModelBuilderVersion.V5_0)]
public class TLPContext : DbContext
{
public TLPContext()
: base("DefaultConnection")
{
//We do not want implicit uncontrollable lazy loading, instead we use the explicit Load method
this.Configuration.LazyLoadingEnabled = false;
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
//Primary key
modelBuilder.Entity<User>().HasKey(p => p.UserId);
modelBuilder.Entity<User>().Property(p => p.FirstName).HasMaxLength(30).IsRequired();
modelBuilder.Entity<User>().Property(p => p.RegisteredAt).IsRequired();
}
public DbSet<User> Users { get; set; }
}
OriginalL'auteur Elisabeth | 2013-02-12
Vous devez vous connecter pour publier un commentaire.
Ninjects regarde pour les constructeurs dans l'ordre suivant:
[Inject]
Dans votre cas, votre
TLPContext
constructeur n'est pas marqué avec[Inject]
de sorte que le 2. les règles s'applique et Ninject allons essayer de résoudre le constructeur de la classe de base et puis lève l'exception.De sorte que vous pouvez résoudre ce problème en marquant votre constructeur avec la
InjectAttribute
Ou vous pouvez spécifiez le constructeur avec le
ToConstructor
méthode lors de l'enregistrement de votreTLPContext
:Qu'entendez-vous sur "NinjectDependencyResolver.cs source not found"? Comment avez-vous installé Ninject dans votre projet avec nuget?
J'ai toujours utiliser nuget oui. aucune installation manuelle hehe
Et avec l'utilisation de la
ToConstructor()
ne vous obtenez toujours exactement le même message d'erreur: "4) d'Injection de dépendance DbConnection dans le paramètre existingConnection de constructeur de type DbContext"? Êtes-vous sûr que votre application est correctement recompilé. Pouvez-vous essayer de nettoyer et reconstruire votre solution?C'est bizarre. Maintenant, je le reconstruire et le ToConstructor() fonctionne. Les pensions de titres sont injectés dans le contrôleur HomeController. Mais lorsque j'utilise mon ancienne méthode sans ToConstructor j'obtiens ceci: BindingConfiguration.cs n'est pas trouvé ??
OriginalL'auteur nemesv
J'ai utilisé le même problème. J'ai été en utilisant
Ninject MVC
et j'ai essayé de créer une instance de lakernel
à l'aide de la nouvelleStandardKernel
ctor, et il n'a pas de travail.Mon problème a été le point 3 que @Elisa mentionné plus tôt:
Ensure you have not accidentally created more than one kernel.
Je l'ai résolu en utilisant
bootstrapper.Kernel
à la place.OriginalL'auteur Jaider