1、是什么
Ninject是一个快如闪电、超轻量级的基于.Net平台的依赖注入框架。它能够帮助你把应用程序分离成一个个松耦合、高内聚的模块,然后用一种灵活的方式组装起来。通过使用Ninject配套你的软件架构,那么代码将会变得更加容易编写、重用性强、易于测试和修改。
2.为什么要用Ninject?
<span style="font-size:24px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Data
{
public interface IValueCalculater
{
decimal ValueProducts( Product[] products);
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Data
{
public class LinqValueCalculator:IValueCalculater
{
public decimal ValueProducts(params Product[] products)
{
return products.Sum(p => p.Price);
}
}
}</span>
接下来编写一个Ninject配置类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Ninject;
namespace Data
{
public class DataResolver
{
private static DataResolver _Instance;
public static DataResolver Instance
{
get
{
if (_Instance == null)
{
_Instance = new DataResolver();
}
return _Instance;
}
}
IKernel ninjectKernel;
private DataResolver()
{
ninjectKernel = new StandardKernel();
//将接口和实现类绑定
ninjectKernel.Bind<IValueCalculater>().To<LinqValueCalculator>());
ninjectKernel.Bind<IValueCalculater>().To<LinqValueCalculator>());
}
public T Resolve<T>() where T : class
{
return ninjectKernel.Get<T>();
}
}
前台调用实现方法:
<span style="font-size:24px;">using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Data;
namespace NinjectDemo
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void button1_Click(object sender, RoutedEventArgs e)
{
Product[] ps ;
//实体集合
ps = new[]{
new Product(){Name="iphone" , Price=6525M},
new Product(){Name="newbalance" , Price=800M},
};
//注入接口
IValueCalculater ival= DataResolver.Instance.Resolve<IValueCalculater>();</span>
<span style="font-size:24px;">
//调用具体实现方法
decimal d = ival.ValueProducts(ps);
label1.Content = d;
}
}
}</span>
总结:Ninject是一个在中小型应用中常用的IOC容器,Ninject的应用并非这么简单,以上仅仅是一个最基本的使用方法了。除此之外,还可以应用在多数据库的系统中,通过它我们可以轻松的实现数据库的切换。另外对于新手来说,Ninject也是可以用来学习IOC容器的一个很好地锻炼工具。