Folgen Sie der Anleitung here, aber anstelle von StructureMap versucht Ninject zu verwenden."MissingMethodException: Kann eine Instanz einer Schnittstelle nicht erstellen" beim Binden der generischen Schnittstelle zum Repository mit Ninject
Es wirft den Fehler "MissingMethodException: Kann eine Instanz einer Schnittstelle erstellen" Fehler jedes Mal, wenn ich versuche, eine IRepository<SomeEntityType>
in einen Parameter in einer Aktionsmethode zu injizieren.
Update: Auch geben Bootstrapper.cs nicht gefunden, habe ich das MVC3 Ninject Nuget-Paket.
public ActionResult Index(IRepository<SomeEntityType> repo)
{
return View();
}
NinjectWebCommon.cs
private static void RegisterServices(IKernel kernel)
{
string Cname = "VeraDB";
IDbContext context = new VeraContext("VeraDB");
kernel.Bind<IDbContext>().To<VeraContext>().InRequestScope().WithConstructorArgument("ConnectionStringName", Cname);
kernel.Bind(typeof(IRepository<>)).To(typeof(EFRepository<>)).WithConstructorArgument("context",context);
}
IRepository
public interface IRepository<T> where T : class
{
void DeleteOnSubmit(T entity);
IQueryable<T> GetAll();
T GetById(object id);
void SaveOrUpdate(T entity);
}
EFRepository
public class EFRepository<T> : IRepository<T> where T : class, IEntity
{
protected readonly IDbContext context;
protected readonly IDbSet<T> entities;
public EFRepository(IDbContext context)
{
this.context = context;
entities = context.Set<T>();
}
public virtual T GetById(object id)
{
return entities.Find(id);
}
public virtual IQueryable<T> GetAll()
{
return entities;
}
public virtual void SaveOrUpdate(T entity)
{
if (entities.Find(entity.Id) == null)
{
entities.Add(entity);
}
context.SaveChanges();
}
public virtual void DeleteOnSubmit(T entity)
{
entities.Remove(entity);
context.SaveChanges();
}
}
IEntity wirkt nur als generische Einschränkung.
Wo ist die Codezeile, die die Ausnahme auslöst? –
@KirkWoll Wie bereits erwähnt, wird dieser Fehler immer dann auftreten, wenn ich versuche, einen IRepository -Parameter in einer Aktionsmethode usw. zu übergeben. Nun klar, weil Ninject nicht richtig konfiguriert ist und nichts bindend ist. Vielleicht etwas mit dem MVC3 Nuget-Paket zu tun, das nicht gut mit MVC4 spielt. –
LaserBeak
Sie haben meine Frage nicht beantwortet. Bitte zeigen Sie diese Codezeile an. –