Ninject如何在ASP.NETMVC中使用-创新互联

Ninject如何在ASP.NET MVC中使用?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

创新互联建站坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站建设、网站设计、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的市中网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

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

public interface ITest
{
 Decimal ValueProducts(IEnumerable<Product>products) ;
}
public class Test:ITest
{
 public Decimal ValueProducts(IEnumerable<Product>products) 
 {
 return products.sum(p=>p.Price);
 }
}
public class ShoppingCart
{
 private ITest test;
 public IEnumerable<Product>products{set;get;}
 public ShoppingCart( ITest test)
 {
 this.test=test;
 }
 public Decimal result(products);
}

通过接口可以说达到了我们想要的结果,也就是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));


这时候我们修改下控制器中的代码


private ITest test;
public HomeController(ITest test)
{
 this.test=test;
}
public ActionResult Index(){
 ShoppingCart cart=new ShoppingCart(IT);{Products=products};
 Decimal total=IT.result(); return View(total);
}

Ninject大概的用法也差不多了,下面说的时Ninject比较新颖的东西
就是指定属性或者构造函数传值了,其实也没什么,只是WithConstructorArgument和WithPropertyValue这两个的使用


public interface IHelper
 {
 Decimal ApplyDiscount(Decimal totalParam); 
 }
 public class Helper : IHelper
 {
 public Decimal DiscountSize { set; get; } 
 
 public decimal ApplyDiscount(decimal totalParam)
 {
 return (totalParam - (discountparam / 100m * totalParam));
 }
 }
private void AddBindings()
 {
 kernel.Bind<ITest>().To<Test>();
 
 kernel.Bind<IHelper>().To<Helper>().WithPropertyValue("DiscountSize", 50M); kernel.Bind<IHelper>().To<Helper>().WithConstructorArgument("discountparam", 50M);
 }

WithPropertyValue这个有两个参数一个是属性名,一个是属性值,这样子可以一开始就给这个属性赋值上默认值,个人感觉作用倒是不大,也有其他的方法可以实现同样效果


WithConstructorArgument这个也差不多,参数一是构造函数的形参,后面的参数是值


ASP.NET 是什么

ASP.NET 是开源,跨平台,高性能,轻量级的 Web 应用构建框架,常用于通过 HTML、CSS、JavaScript 以及服务器脚本来构建网页和网站。

看完上述内容,你们掌握Ninject如何在ASP.NET MVC中使用的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!

当前文章:Ninject如何在ASP.NETMVC中使用-创新互联
网页地址:https://www.cdcxhl.com/article12/cspjdc.html

成都网站建设公司_创新互联,为您提供网站设计公司电子商务全网营销推广网站策划外贸建站网站改版

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

微信小程序开发