Làm theo hướng dẫn here, nhưng thay vì StructureMap cố gắng sử dụng Ninject.Nhận "MissingMethodException: Không thể tạo một thể hiện của một giao diện" khi ràng buộc giao diện chung với kho lưu trữ với Ninject
Nó ném ra lỗi "MissingMethodException: Không thể tạo trường hợp giao diện" bất kỳ lúc nào tôi cố gắng tiêm một thông số IRepository<SomeEntityType>
vào một tham số trong phương thức hành động.
Cập nhật: Cũng không tìm thấy bootstrapper.cs, tôi đã sử dụng gói Ninken Nuget MVC3.
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 chỉ đóng vai trò như một hạn chế chung.
public interface IEntity
{
Guid Id { get; set; }
}
Dòng mã kích hoạt ngoại lệ ở đâu? –
@KirkWoll Như đã nêu, lỗi này sẽ xuất hiện bất cứ khi nào tôi thử chuyển một tham số IRepository vào một phương thức hành động vv. Bây giờ rõ ràng vì Ninject không được cấu hình đúng và không có gì ràng buộc. Có lẽ một cái gì đó để làm với gói MVC3 Nuget không chơi tốt với MVC4. –
LaserBeak
Bạn chưa trả lời câu hỏi của tôi. Vui lòng chỉ ra dòng mã đó. –