代码如下:
public class ProductController : Controller
{
private IProductRepository repository;
public int PageSize = 4; //每页产品数量.
public ProductController (IProductRepository productRepository)
{
this.repository = productRepository;
}
public ViewResult List(int page = 1)
{
return View(repository.Products.OrderBy(p=>p.ProductID).Skip((page-1)*PageSize).Take(PageSize));
}
}
public interface IProductRepository
{
IQueryable<Product> Products { get; }
}
public class EFProductRepository : IProductRepository
{
private EFDbContext context = new EFDbContext();
public IQueryable<Product> Products
{
get { return context.Products; }
}
}
class EFDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
}
//实现自定义控制器
//继承默认DefaultControllerFactory类是创建控制器类实例的一个类
public class NinjectControllerFactory : DefaultControllerFactory
{
private IKernel ninjectKernel;
public NinjectControllerFactory()
{
//容器创建
ninjectKernel = new StandardKernel();
AddBindings();
}
protected override IController GetControllerInstance (RequestContext requestContext, Type controllerType)
{
//从容器中获取控制器对象
//控制器类型
return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType);
}
private void AddBindings()
{
//配置容器
ninjectKernel.Bind<IProductRepository>().To<EFProductRepository>();
}
}
public class Product
{
public int SellerID { get; set; }
public int ProductID { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public decimal Price { get; set; }
public string Category { get; set; }
}
Global.asax: protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
}