MVC5使用Ninject学习笔记

Ninject

作用:

解耦合

nuget包:

Ninject.MVC5
Ninject
Ninject.Web.Common

代码段:

接口代码:

  public interface ILinqValueCalculator
   {
       decimal ValueProducts(List<Product> products);
   }

接口实现代码:

   public class LinqValueCalculator:ILinqValueCalculator
   {
       public decimal ValueProducts(List<Product> products)
       {
           return products.Sum(x => x.Price);
       }
   }

使用场景Ninject代码:

public class HomeController : Controller
   {
       private List<Product> products = new List<Product>
       {
           new Product{ Name="名称1", Price=1 },
           new Product{ Name="名称2", Price=2 },
           new Product{ Name="名称3", Price=3 },
           new Product{ Name="名称4", Price=4 },
           new Product{ Name="名称5", Price=5 },
           new Product{ Name="名称6", Price=6 }
       };
       public ActionResult Home()
       {
       
           IKernel kernel = new StandardKernel();
           kernel.Bind<ILinqValueCalculator>().To<LinqValueCalculator>();
           ILinqValueCalculator calc = kernel.Get<ILinqValueCalculator>();
           ShoppingCar shoppingCar = new ShoppingCar(calc) { products = products };
           return View(shoppingCar.CalculateProductTotal());
       }
   }

Ninject MVC5 依赖解析器
创建依赖解析器

public class NinjectDependercyResolver : IDependencyResolver
   {
       private IKernel kernel;

       public NinjectDependercyResolver(IKernel kernelParam)
       {
           kernel = kernelParam;
           AddBindings();
       }

       public object GetService(Type serviceType)
       {
           return kernel.TryGet(serviceType);
       }

       public IEnumerable<object> GetServices(Type serviceType)
       {
           return kernel.GetAll(serviceType);
       }

       private void AddBindings()
       {
           kernel.Bind<ILinqValueCalculator>().To<LinqValueCalculator>();
       }
   }

注册依赖解析器
Ninject.MVC5与Ninject.MVC3不同,不会再创建NinjectWebCommon.cs,而是在Global.asax文件里注册;使用我们自定义的NinjectDependencyResolver来替换mvc5中默认的DependencyResolver,
这样就能够让mvc5支持DI,依赖注入。
DependencyResolver.SetResolver(new NinjectDependercyResolver(new StandardKernel()));
改造Ninject使用代码

public class HomeController : Controller
   {

       private ILinqValueCalculator calc;
       private List<Product> products = new List<Product>
       {
           new Product{ Name="名称1", Price=1 },
           new Product{ Name="名称2", Price=2 },
           new Product{ Name="名称3", Price=3 },
           new Product{ Name="名称4", Price=4 },
           new Product{ Name="名称5", Price=5 },
           new Product{ Name="名称6", Price=6 }
       };

       public HomeController(ILinqValueCalculator calcParam)
       {
           calc = calcParam;
       }

       public ActionResult Home()
       {
           ShoppingCar shoppingCar = new ShoppingCar(calc) { products = products };
           return View(shoppingCar.CalculateProductTotal());
       }
   }

Demo下载

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值