• 控制反转&依赖注入


    控制反转(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
    本文版权归作者和博客所有,欢迎转载。但未经作者同意,必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。

  • 相关阅读:
    Linux Centos7安装mongodb并设置开机启动
    解决Centos7下载慢的问题
    用Python处理HTML转义字符的5种方式
    java 利用poi对Excel解析读取和写入,解析resources下的.json文件
    feign.FeignException: status 404 reading DeptClientService#findAll()
    java中进程与线程的区别
    java中sigar获取信息
    Cesium 4490 解决方案
    Windows Server自动化部署Sysprep
    关于SET ANSI_PADDING的作用
  • 原文地址:https://www.cnblogs.com/Jacques/p/3108514.html
Copyright © 2020-2023  润新知