C# 获得;MissingMethodException:无法创建接口的实例;使用Ninject将通用接口绑定到存储库时
遵循指南,但不是试图使用Ninject的StructureMap 每当我试图将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
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();
}
}