Pro ASP.NET MVC 3 Framework学习笔记之九
接着上次的Ninject的笔记,如果你是初次路过,可以先看看我前面的笔记。
一,创建依赖链(Chains of Dependency)
当我们向Ninject请求创建一个类型时,Ninject会去检查该类型和其他类型之间的耦合关系。如果有额外的依赖,Ninject也会解析它们并创建我们需要的所有类的实例。为了进一步说明,我们创建一个新的接口和一个实现该接口的类。请注意我们的例子是跟前面的笔记衔接的,所以如果你打算跟着一起操作的话,最好能够去看看前面的笔记。
创建一个IDiscountHelper如下所示:
public interface IDiscountHelper
{
//Product打折应用
decimal ApplyDiscount(decimal totalParam);
}
创建一个实现IDiscountHelper的类如下所示:
public class DefaultDiscountHelper : IDiscountHelper
{
public decimal ApplyDiscount(decimal totalParam)
{
return (totalParam - (10m / 100m * totalParam)); //打9折
}
}
下面在LinqValueCalculator.cs添加依赖(这个类是前面的笔记里面的)
public class LinqValueCalculator : IValueCalculator
{
private IDiscountHelper discounter;
public LinqValueCalculator(IDiscountHelper discountParam)
{
discounter = discountParam;
}
public decimal ValueProducts(params Product[] products)
{
return discounter.ApplyDiscount(products.Sum(p => p.Price));
}
}
同样是通过Constructor Injection的方式
下面采取同样的方式将接口绑定到实现,如下所示:
static void Main(string[] args)
{
IKernel ninjectKernel = new StandardKernel();
//绑定接口到其对应的实现
ninjectKernel.Bind<IValueCalculator>().To<LinqValueCalculator>();
ninjectKernel.Bind<IDiscountHelper>().To<DefaultDiscountHelper>();
//获取接口实现
IValueCalculator calcuImpl = ninjectKernel.Get<IValueCalculator>();
ShoppingCart cart = new ShoppingCart(calcuImpl);
//执行
Console.WriteLine("Tatol:{0:c}", cart.CalculateStockValue());
}
我们使用Ninject将两个接口分别绑定到对应的实现类,我们不必改变实现IValueCalculator类的任何代码。Ninject知道当我们请求IValueCalculator的类型时就实例化LinqValueCalculator对象返回给我们。它会去检查这个类,并发现LinqValueCalculator依赖另一个接口,并且这个接口是它能解析的,Ninject创建一个DefaultDiscountHelper的实例注入LinqValueCalculator类的构造器,并返回IValueCalculator类型的对象。Ninject会只用这种方式检查每一个要实例化的类的依赖,不管涉及的依赖链有多复杂,多冗长。
二,指定属性和参数值
1.我们可以提供一些属性的具体值或者详细信息给Ninject,当我们要绑定接口到实现的时候。上面的例子里面我的
- 发表评论
-
- 最新评论 进入详细评论页>>
今日头条
更多>>您可能感兴趣的文章
- 谈.Net委托与线程——创建无阻塞的异步调用(一
- Asp.net MVC源码分析--Model Validation(Client端)实现(2)
- 微软ASP.NET站点部署指南(11):部署SQL Server数据
- ASP.NET数据格式的Format--DataFormatString
- Pro ASP.NET MVC 3 Framework学习笔记之九
- 教你如何来恢复一个丢失的数据文件
- asp.net js模拟Button点击事件
- winform下通过webclient使用非流方式上传(post)数据和
- MVC中一个表单实现多个提交按钮(一个action搞定
- asp.net 六大内置对象(2)