C# 获得;MissingMethodException:无法创建接口的实例;使用Ninject将通用接口绑定到存储库时

C# 获得;MissingMethodException:无法创建接口的实例;使用Ninject将通用接口绑定到存储库时,c#,asp.net-mvc-4,ninject,entity-framework-5,C#,Asp.net Mvc 4,Ninject,Entity Framework 5,遵循指南,但不是试图使用Ninject的StructureMap 每当我试图将IRepository插入到操作方法的参数中时,它就会抛出“MissingMethodException:无法创建接口实例”错误 更新:同样由于未找到bootstrapper.cs,我使用了MVC3 Ninject Nuget包 public ActionResult Index(IRepository<SomeEntityType> repo) { retur

遵循指南,但不是试图使用Ninject的StructureMap

每当我试图将
IRepository
插入到操作方法的参数中时,它就会抛出“MissingMethodException:无法创建接口实例”错误

更新:同样由于未找到bootstrapper.cs,我使用了MVC3 Ninject Nuget包

 public ActionResult Index(IRepository<SomeEntityType> repo)
        {


            return View();
        }

这种错误通常表示运行时dll的版本与项目中引用的版本不同

尝试将所有相关DLL从项目目录手动复制到bin目录


如果做不到这一点,请查看(诚然,非常旧的)帖子,了解如何调试问题。

我犯了同样的简单错误。Ninject将参数注入到构造函数中,但您将参数添加到索引控制器操作中

应该是这样的:

public class HomeController : Controller
{
    private IRepository<SomeEntityType> _repo;

    public HomeController(IRepository<SomeEntityType> repo)
    {
        _repo= repo;
    }

    public ActionResult Index()
    {
        ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application. " +
                          _repo.HelloWorld();

        return View();
    }
}
公共类HomeController:控制器
{
私人投资回购;
公共房屋控制器(IRepository repo)
{
_回购=回购;
}
公共行动结果索引()
{
ViewBag.Message=“修改此模板以跳转启动ASP.NET MVC应用程序。”+
_repo.HelloWorld();
返回视图();
}
}

有意义吗?

触发异常的代码行在哪里?@KirkWoll如前所述,每当我尝试在操作方法中传递IRepository类型的参数时,就会出现上述错误。现在很明显,因为Ninject没有正确配置,没有任何绑定。也许与MVC3 Nuget包与MVC4的配合不好有关。您还没有回答我的问题。请显示该行代码。请添加更详细的堆栈跟踪(确切的异常和突出的详细信息)这似乎是最有可能的,尤其是我们尚未与我们共享堆栈跟踪或完整消息。与我犯的错误完全相同:)我也是,完全一样!!还有……我也是;)塔克斯!
    public interface IRepository<T> where T : class
{
    void DeleteOnSubmit(T entity);
    IQueryable<T> GetAll();
    T GetById(object id);
    void SaveOrUpdate(T entity);
}
    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();
    }
}
   public interface IEntity
{
    Guid Id { get; set; }
}
public class HomeController : Controller
{
    private IRepository<SomeEntityType> _repo;

    public HomeController(IRepository<SomeEntityType> repo)
    {
        _repo= repo;
    }

    public ActionResult Index()
    {
        ViewBag.Message = "Modify this template to jump-start your ASP.NET MVC application. " +
                          _repo.HelloWorld();

        return View();
    }
}