首页 > 其他 > 详细

使用Ninject的一般步骤

时间:2019-01-15 13:05:29      阅读:125      评论:0      收藏:0      [点我收藏+]

以下为DI控制反转个人理解烦请各位大牛指教~

编写程序时我们应当遵循抵耦合高内聚的原则(各个功能模块互不依赖).

我们可以利用面向对象里面接口的特性来进行DI控制反转,让功能模块全部依赖接口,而不依赖具体的实现类,当程序跑起来以后通过注入的方式注入具体的实现类如一下代码:

/// <summary>
    /// 购物车类
    /// </summary>
    public class ShoppingCart {
        /// <summary>
        /// 创建计算器接口
        /// </summary>
        IvalueCalculator calculator;


        /// <summary>
        /// 构造函数来注入实际调用的计算方法
        /// </summary>
        /// <param name="ivalueCalculator"></param>
        public ShoppingCart(IvalueCalculator ivalueCalculator)
        {
            calculator = ivalueCalculator;
        }

        /// <summary>
        /// 价格计算
        /// </summary>
        /// <returns></returns>
        public decimal CalculateStockValue()
        {
            Product[] products = {
                new Product {Name = "西瓜", Category = "水果", Price = 2.3M},
              new Product {Name = "苹果", Category = "水果", Price = 4.9M},
              new Product {Name = "空心菜", Category = "蔬菜", Price = 2.2M},
              new Product {Name = "地瓜", Category = "蔬菜", Price = 1.9M}
            };
            decimal totalValue = calculator.ValueProducts(products);
            return totalValue;
        }


    }


    /// <summary>
    /// 计算器实现类
    /// </summary>
    public class LinqValueCalculator : IvalueCalculator
    {
        /// <summary>
        /// 价格计算实现方法
        /// </summary>
        /// <param name="products"></param>
        /// <returns></returns>
        public decimal ValueProducts(params Product[] products)
        {
            return products.Sum(u => u.Price);
        }


    }

    /// <summary>
    /// 计算器接口
    /// </summary>
    public interface IvalueCalculator
    {
        /// <summary>
        /// 价格计算方法
        /// </summary>
        /// <param name="products"></param>
        /// <returns></returns>
        decimal ValueProducts(params Product[] products);
    }

 

这样,购物车类就实现了松耦合,购物车内的计算价格方法只依赖于计算器接口(IvalueCalculator ),而不依赖具体的计算类(LinqValueCalculator),实际的价格计算类我们通过构造函数的方法注入到购物车内的计算器接口

 

当我们在实际使用时既可以像如下方法一样实现

static void Main(string[] args)
        {
               //创建一个接口的对象,引用计算类
            IvalueCalculator calculator = new LinqValueCalculator();
            //以方法传入具体实现类
            ShoppingCart shopping = new ShoppingCart(calculator);
        //调用
            Console.WriteLine("价格:{0}", shopping.CalculateStockValue());
            Console.ReadLine();
        }

 

 

可以通过C#的 Ninject 来管理各种注入,只需要提前绑定好接口的对应实现类既可以在使用时去索要一个对应的实现类,如下代码

     //Ninject
            IKernel ninjectKernel = new StandardKernel();
            //把一个接口(IValueCalculator)绑定到一个实现该接口的类(LinqValueCalculator)
            ninjectKernel.Bind<IvalueCalculator>().To<LinqValueCalculator>();
            
            //向NiNject索要一个IvalueCalculator的实现类
            IvalueCalculator calcImpl = ninjectKernel.Get<IvalueCalculator>();
            //注入购物车类
            ShoppingCart shopping = new ShoppingCart(calcImpl);

            Console.WriteLine("价格:{0}", shopping.CalculateStockValue());
            Console.ReadLine();

 

使用Ninject的一般步骤

原文:https://www.cnblogs.com/zcl-cnblogs/p/10270815.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!