• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

ASP.NET MVC使用Ninject的方法教程

asp 搞代码 4年前 (2022-01-03) 24次浏览 已收录 0个评论

这篇文章主要给大家介绍了关于ASP.NET MVC使用Ninject的相关资料,文中通过示例代码介绍的非常详细,对大家啊的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

为什么要使用Ninject?

很多其它类型的IOC容器过于依赖配置文件,老是配置,总感觉有点不爽,而且要使用assembly-qualified名称(也就是类型的全名)来进行定义,稍不注意就会因为打错字而令整个程序崩掉。Ninject是一个快如闪电、超轻量级的基于.Net平台的IOC容器,主要用来解决程序中模块的耦合问题,它的目的在于做到最少配置。因此如果你不喜欢配置,不喜欢重量级IOC框架,那么就用小苹果Ninject吧!

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

 public interface ITest { Decimal ValueProducts(IEnumerableproducts) ; } public class Test:ITest { public Decimal ValueProducts(IEnumerableproducts) { return products.sum(p=>p.Price); } } public class ShoppingCart { private ITest test; public IEnumerableproducts{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().To(); 3:最后一步就是使用Ninject创建一个对象了 ITest IT=ninject.Get(); }

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

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

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

 public class NinjectResolver:IDep<p style="color:transparent">来源gao!daima.com搞$代!码网</p>endencyResolver { private IKernel kernel; public NinjectResolver(IKernel kernel) { this.kernel=kernel; AddBinding(); } public IEnumerable GetServices(Type serviceType) { return kernel.GetAll(serviceType); } public Object GetService(Type serviceType) { return kernel.TryGet(serviceType); } void AddBinding() { kernel.Bind().To(); } }

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().To(); kernel.Bind().To().WithPropertyValue("DiscountSize", 50M); kernel.Bind().To().WithConstructorArgument("discountparam", 50M); }

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

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

好了,Ninject就介绍到这了,如有不对,请多多包涵

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对gaodaima搞代码网的支持。

以上就是ASP.NET MVC使用Ninject的方法教程的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:ASP.NET MVC使用Ninject的方法教程

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址