ASP.NET MVC使用Ninject

    Ninject是一个快如闪电的,轻量级的。。。。。依赖注入框架,呃呃呃,貌似很少用到,Ninject就是一个DI容器,作用是对ASP.NET MVC程序中的组件进行解耦 ,说到解耦其实也有其他的方式可以达到解耦这个目的,比如接口

 View Vode

     通过接口可以说达到了我们想要的结果,也就是Shopping和Test之间的耦合。但是在控制器中却没办法达到这个目的

复制代码
public ActionResult Index(){    ITest IT=new Test();    ShoppingCart cart=new ShoppingCart(IT);{Products=products};    Decimal total=IT.result();    return View(total); }
复制代码

我们只能借助Ninject来帮我们实现

可以通过nuget下载Ninect也可以通过Ninject下载

那么我们该怎么使用Ninject帮我们解决上述的问题呢?

其实使用Ninect不难,一共三个步骤:

复制代码
//在控制器public ActionResult Index() {     1:创建一个Ninject的内核      IKernel ninject=new StandardKernel();     2:就是配置Ninject内核,其实就是将实现类和接口类绑定在一起     ninject.Bind<ITest>().To<Test>();     3:最后一步就是使用Ninject创建一个对象了     ITest IT=ninject.Get<ITest>(); }
复制代码

从创建内核到创建对象跟Spring.Net倒是很相似。

可能有点点强迫症吧,觉得这么一坨东西放在那里好碍眼吖,不可能叫我每一个动作里面都写这一坨东西吧,当然不是。

下面就创建一个依赖项解析器(好像很高大上一样,其实就是将上面的代码做个封装而已)

复制代码
public class NinjectResolver:IDependencyResolver {    private IKernel kernel;    public  NinjectResolver(IKernel kernel)    {       this.kernel=kernel;             AddBinding();    }     public IEnumerable<Object> GetServices(Type serviceType)    {       return kernel.GetAll(serviceType);     }     public Object GetService(Type serviceType)    {        return kernel.TryGet(serviceType);     }        void AddBinding()    {       kernel.Bind<ITest>().To<Test>();     } }   
复制代码
IDependencyResolver这个是System.Mvc里面的继承这个接口必须实现GetServices和GetService,AddBinding这个方法是用来绑定实现类和接口

GetService方法中的TryGet类似于上面的Get,当没有合适的绑定时,这个会返回一个null值,不会抛异常,而GetServices方法中的GetAll对单一类型的多个绑定时,可以用到这个
最后一步就是在App_Start这一个文件夹中找到NinjectWebCommon.cs这个文件再找到 RegisterServices(IKernel kernel)这个方法添加
 System.Web.Mvc.DependencyResolver.SetResolver(newNinjectResolver(kernel));
这时候我们修改下控制器中的代码
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信