Pro ASP.NET MVC 3 Framework学习笔记之九

来源:网络 责任编辑:栏目编辑 发表时间:2013-07-01 19:56 点击:

 

接着上次的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下XML数据访问新机制
    • asp.net 面试+笔试题目第1/2页
    • C# 邮件地址是否合法的验证
    • asp.net 设置GridView的选中行的实现代码
    • C#高级编程:数据库连接[1]
    • 经典C++程序1
    • IIS 自动回收导致后台定时器失效的问题解决
    • ASP.NET&#160;GridView列表代码示例
    • Asp.net MVC源码分析--Action Filter的链式调用
    网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索
    Copyright © 2008-2015 计算机技术学习交流网. 版权所有

    豫ICP备11007008号-1