Ninject依赖项注入容器

最近在看asp.net mvc 和api方面的东西,

遇上个概念 “ 依赖项注入-DI”和“依赖项注入容器-DI容器”,和解耦操作,感觉很有用,所以特意记录一下

使用Ninject来进行操作,所以要先在 vsIDE环境里打开,工具-->库程序包管理器-->程序包管理器控制台

运行 

Install-Package Ninject[ -version 3.0.1.10]

我没指定版本,所以自动安装了当前可以安装的最新版 3.3.4.0。

自己写的源代码如下,

例子是控制台程序,使用vs2013环境,因为手里有2013,所以就直接装了这个, 没用最新的vs。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Ninject;

namespace Ninjecttest
{
    class Program
    {
        static void Main(string[] args)
        {
            Product[] products = {
                new Product{Name = "a1",Price=1.1M,Mem="mem1"},
                new Product{Name = "a2",Price=2.2M,Mem="mem2"},
                new Product{Name = "a3",Price=3.3M,Mem="mem3"},
                new Product{Name = "a4",Price=4.4M,Mem="mem4"},
                new Product{Name = "a5",Price=5.5M,Mem="mem5"},
            };

            doTotal dototal = new doTotal(products);
            decimal aaa = dototal.totalPrices();
            Console.WriteLine(aaa);

        }
        //业务主流程
        public class doTotal
        {
            public IEnumerable<Product> productlist{get;set;}
            public doTotal(IEnumerable<Product> products){
                productlist = products;
            }
            public decimal totalPrices() {
                IKernel ninjectKernel = new StandardKernel();
                ninjectKernel.Bind<ITotal>().To<myTotalUse>();

                ITotal itotal = ninjectKernel.Get<ITotal>();
                return itotal.myTotal(productlist);
            }

        }

        //接口,用于Ninject解耦
        public interface ITotal
        {
            decimal myTotal(IEnumerable<Product> products);
        }

        //方法实际使用的,在下边的A和B中选一个使用, 这样配合Ninject就世界了业务代码通过接口和方法的解耦,
        //这样
        public class myTotalUse : ITotal{
            protected decimal totalPrices =0M;
            public decimal myTotal(IEnumerable<Product> products){
                totalPrices = products.Sum(p => p.Price);
                return totalPrices;
            }
        }
        //方法A
        public class myTotalA : ITotal{
            protected decimal totalPrices =0M;
            public decimal myTotal(IEnumerable<Product> products){
                totalPrices = products.Sum(p => p.Price);
                return totalPrices + 0M;
            }

        }
        //方法B
        public class myTotalB : ITotal
        {
            protected decimal totalPrices = 0M;
            public decimal myTotal(IEnumerable<Product> products)
            {
                totalPrices = products.Sum(p => p.Price);
                return totalPrices + 10M;
            }

        }

        //数据类模型
        public class Product
        {
            public string Name{get;set;}
            public decimal Price{get;set;}
            public string Mem{get;set;}
        }
    }
}

首先说明一下流程

定义了数据类Product,用来作为数据模型,

然后创建了interface  “ITotal”,用来配合Ninject进行解耦操作,interface解耦的方法也有,这里不做赘述,可能会另起记录。

(接口命名规范一般以I开头,还是遵守以下好)

然后分别建立了  “myTotalUse” ,“myTotalA” , “myTotalB” 三个类作为注入项和例子,A和B分别为另两个实现,可以粘贴到 “myTotaluse ”里,体验解耦。

另外写了 “doSome” 类,作为业务流程控制代码,这里只实现了一个方法就是计算总价,

在 “doSome” 的构造方法中,接收new时传过来的商品数据,

在方法 “totalPrices” 中,进行总价统计,这里使用了Ninject来进行注入项操作。

以上,实现业务代码与操作代码类的解耦,可以随时替换操作代码而不用改动其它代码。

初期学习和尝试,有错误和不足望理解,在以后学习使用过程中会随时更新更正。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值