最近在看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来进行注入项操作。
以上,实现业务代码与操作代码类的解耦,可以随时替换操作代码而不用改动其它代码。
初期学习和尝试,有错误和不足望理解,在以后学习使用过程中会随时更新更正。