控制反转&依赖注入

控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。 控制反转还有一个名字叫做依赖注入(Dependency Injection)。简称DI。

Ioc和DI都是一种设计模式,需要了解的它们,首先得去了解这两种设计模式。通俗的理解可以为:IoC模式看做是工厂模式的升华,可以把IoC看作是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的,然后利用“反射”编程,根据XML中给出的类名生成相应的对象。从实现来看,IoC是把以前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。

实现控制反转的常用的开源架构:StructureMap, ObjectBuilder, Unity,AutoFac.....关于它们的了解和下载都可以去开源网站http://www.oschina.net上获取。

StructureMap 是我自己唯一在项目中使用过的框架,所以下面是相关的使用代码,至于其他的方式,读者可以自己去探索。它是.NET环境下的一个轻量级依赖注入工具,StructureMap也是一个灵活的、可扩展的通用“插件”机制的.NET应用。

使用步骤:

1. 应用程序启用的时候初始化 对象容器,用于加载所有的对象映射和对象关联

1  void Session_Start(object sender, EventArgs e)
2         {
3             BootStrap.Init();
4         }
Global.cs


2. 代码映射配置,也可以在xml文件中去配置。在这里就不说详谈使用方法了。

using System;
using System.Linq;
using FluentNHibernate;
using FluentNHibernate.Cfg;
using NHibernate;
using StructureMap;

namespace MedicalCare.IoCSetup
{
    public static class BootStrap
    {
        public static void Init()
        {
            ObjectFactory.Initialize(x =>
                {
                    x.For<IScheduleAdaptor>().Use<ScheduleAdaptor>();
                    x.For<IUserInfoToUserMessage>().Use<UserInfoToUserMessage>();
                    x.For<IFamilyListToScheduleList>().Use<FamilyListToScheduleList>();
                    x.For<IUserLoginValidator>().Use<UserLoginValidator>();

               
                }
            );
        }

3. 类中获取对象接口实现的实例,说明只有在运行时才绑定具体的实现类对象,实现了一种解耦的操作

注意:其中的IScheduleAdaptor ,ScheduleAdaptor 分别是接口和接口的一种实现。

  private IList<ScheduleEntity> CheckSchedule(ScheduleMessage message)
        {
            var scheduleAdaptor = ObjectFactory.GetInstance<IScheduleAdaptor>();
            return scheduleEntityList;
        }
View Code

作者:Jacques Zhu
出处:http://www.cnblogs.com/Jacques
本文版权归作者和博客所有,欢迎转载。但未经作者同意,必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

原文地址:https://www.cnblogs.com/Jacques/p/3108514.html