当前位置: 首页 > 工具软件 > Ninject > 使用案例 >

Ninject的使用

连鸿
2023-12-01

1、是什么 

Ninject是一个快如闪电、超轻量级的基于.Net平台的依赖注入框架。它能够帮助你把应用程序分离成一个个松耦合、高内聚的模块,然后用一种灵活的方式组装起来。通过使用Ninject配套你的软件架构,那么代码将会变得更加容易编写、重用性强、易于测试和修改。

2.为什么要用Ninject?
Ninject是一个IOC容器,用来解决程序中组件的耦合问题,它的目的在于做到最少配置。其他的的IOC工具过于依赖配置文件,需要使用assembly-qualified名称来进行定义,庸长且复杂常常因为打错字而破坏程序。这些是他的优点,也是为什么要选择它。
虽然配置注入看上去更容易扩展应对外部变化,但是项目庞大臃肿之后,配置文件并不好管理。固然有一些可视化的工具,但是仍然容易出现偏差。Ninject最擅长的基本注入功能就是无配置简单快速注入,达到free yourself from xml的目的,对于一般的中小型应用程序完全可以零配置。
缺点:Ninject不能进行热插拔。
3.怎么用?
   说了很多,接下来跟大家分享一下Ninject具体怎么用。来看下面的一个简单的Demo:
    说明:实例主要通过计算两个商品价格之和来进行讲解。
    首先定义一个接口和一个接口的实现类:

<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容器的一个很好地锻炼工具。

 类似资料: