此文章参考点击打开链接,当然,很详细;
1:首先添加引用程序集 using Ninject;
2:创建一个公共类,实现基本业务方法
//创建一个继承自DefaultControllerFactory类的自定义Controller工厂类并重写其中的一些方法。
public class NinjectControllerFactory : DefaultControllerFactory
{
private IKernel ninjectKernel;//申明Ninject核心
public NinjectControllerFactory()//构造函数
{
ninjectKernel = new StandardKernel();//Ninject核心
ninjectKernel.Settings.InjectNonPublic = true;//属性注入,默认情况下只支持public的,添加此处代码可以支持Private
#region 属性注入
// [Ninject.Inject]
//public IMessageProvider MessageProvider { set; get; }
#endregion
AddBindings();
}
protected override IController GetControllerInstance(RequestContext requestContext, Type controllerType)
{
return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType);
}
private void AddBindings()
{
// todo:后面再来添加绑定
ninjectKernel.Bind<IBookRepository>().To<BooksRepository>();
//第一个参数表示实现业务的接口,第二个表示实现改接口的类
// 上面代码中的 ninjectKernel.Get(controllerType) 可获取到一个Controller实例。在这里如果手动实例化Controller类是一个非常复杂的过程,我们不知道Controller类有没有带参数的构造函数,也不知道构造函数的参数是什么类型。而使用Ninject只需要使用上面的一个Get方法就可以,Ninject内部会自动处理所有的依赖关系,智能地创建我们需要的对象。
// Controller工厂类创建好后,我们就需要告诉MVC用我们的NinjectControllerFactory类来创建Controller对象,为此,需在Global.asax文件的Application_Start方法中添加方法,后面会说到
}
}
3:创建一个类,此类包含定义的接口和实现方法:
//定义业务接口
public interface IBookRepository {
IQueryable<Books> books { get; }
bool AddBooks(Books books);
}
//继承接口,实现方法
public class BooksRepository:IBookRepository
{
public List<Books> list=new List<Books> ();//此处必须初始化,否者会报错
public IQueryable<Books> books {
get {
return GetBooks().AsQueryable();
}
}
public static List<Books> GetBooks() {
List<Books> list = new List<Books> {
new Books { ID = 1, Title = "ASP.NET MVC 4 编程", Price = 52},
new Books { ID = 2, Title = "CLR Via C#", Price = 46},
new Books{ ID = 3, Title = "平凡的世界", Price = 37}
};
return list;
}
public bool AddBooks(Books books) {
if (books!=null)
{
list.Add(books);
return true;
}
return false;
}
}
4:接着,我们在配置文件中注册Ninject
//添加工厂容器,注册Ninject,
//注:此处需要导入文件所在的文件夹空间using TeNinject.Infrastructure;
ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());
5:申明实体类
public class Books
{
public int ID { get; set; }
public string Title { get; set; }
public decimal Price { get; set; }
}
6:基本工作已经做好了,现在新建控制器实现
using TeNinject.Infrastructure;//此处为cs文件所在的文件夹
private IBookRepository _IBookRepository;//申明公共接口类
public HomeController(IBookRepository IBookRepository1)//构造函数
{
_IBookRepository = IBookRepository1;
}
//查询
public ActionResult Index()
{
return View(_IBookRepository.books);
}
//添加方法
public ActionResult AddBooks(Books books) {
List<Books> list=new List<Books> ();
if ( _IBookRepository.AddBooks(books))
{
list.Add(books);
return Json(list, JsonRequestBehavior.AllowGet);
}
else
{
return View("Index");
}
}
视图页面和展示数据方法一样,我就不多写了;