zoukankan      html  css  js  c++  java
  • Spring.net Ioc 依赖注入

    控制反转

    (Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的Spring框架的核心。 控制反转一般分为两种类型,依赖注入(Dependency Injection,简称DI)和依赖查找(Dependency Lookup)。

    Spring.NET

    为建立企业级应用提供了一套轻量级的解决方案。通过Spring.NET,我们可以用统一且透明的方式来配置应用程序。Spring.NET的重点是为中间层提供声明式事务管理,以及一个功能齐全的ASP.NET扩展框架。Spring.NET是非侵入式的,代码对框架本身不会产生任何依赖。

    一、控制台程序尝鲜

    1.新建解决方案,DemoNuget(控制台程序)、IService(类库)、Service(类库),在分别新建一个接口和2个类。如下

     

    namespace IService
    {
        public interface IBookService
        {
            string ISBN { get; set; }
        }
    }
    namespace Service
    {
      public class BookService : IBookService
      {
        public string ISBN { get; set; }
      }
    }

    2.DemoNuget添加引用 Service和IService(注:真实项目中,DemoNuget不应该引用Service,这里添加了是为了程序生成时,自动将程序集“Service”复制到程序运行目录下,以免Spring.net无法加载程序集的问题),然后,继续对DemoNuget右键“管理Nuget程序包”

    我这里用的是最新的2.0.1版本,安装后,会添加2个引用,分别是 “Spring.Core”和“Common.Logging”,前者是Spring.net的核心,后者是日志记录组件,所以也可以手动引入这两个类库。

    3.打开DemoNuget下的“Appconfig”文件。内容类似为这样的(不一样也没关系):

    <?xml version="1.0" encoding="utf-8" ?>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
        </startup>
    </configuration>

    然后将下面一段代码复制到“Appconfig”文件中

      <!--Spring.net Ioc start-->
      <configSections>
        <sectionGroup name="spring">
          <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
          <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
        </sectionGroup>
      </configSections>
      <spring>
        <context>
          <resource uri="config://spring/objects"/>
          <resource uri="file://IServices.xml"/>
        </context>
        <objects xmlns="http://www.springframework.net"></objects>
      </spring>
      <!--Spring.net Ioc end-->

    最终结果是这样的

     1 <?xml version="1.0" encoding="utf-8" ?>
     2 <configuration>
     3   <!--Spring.net Ioc start-->
     4   <configSections>
     5     <sectionGroup name="spring">
     6       <section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
     7       <section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
     8     </sectionGroup>
     9   </configSections>
    10   <spring>
    11     <context>
    12       <resource uri="config://spring/objects"/>
    13       <resource uri="file://IServices.xml"/>
    14     </context>
    15     <objects xmlns="http://www.springframework.net"></objects>
    16   </spring>
    17   <!--Spring.net Ioc end-->
    18   
    19     <startup> 
    20         <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    21     </startup>
    22 </configuration>

    其中,第13行代码是加载一个“IServices.xml”的xml文件,所以下一步在DemoNuget中新建一个“IServices.xml”的xml文件,内容如下

    新建完成后,对着“IServices.xml”右键属性,选择“始终复制”,目的与前面引用“Service”道理是一样的。

     4.开始写代码吧,

     1 namespace DemoNuget
     2 {
     3     class Program
     4     {
     5         static void Main(string[] args)
     6         {
     7             IApplicationContext ctx = ContextRegistry.GetContext();
     8             IBookService ibook = (IBookService)ctx.GetObject("ibookService");
     9             Console.WriteLine(ibook.ISBN);
    10 
    11             Console.Read();
    12         }
    13     }
    14 }

    对照着前面一张图,自行脑补吧。运行,会出现如下结果:

  • 相关阅读:
    python字符串
    php设计模式 ---单例模式.
    PHP设计模式---策略模式
    PHP设计模式---适配器模式
    PHP设计模式---抽象工厂模式
    windows下安装redis
    PHP基础知识汇总(四)
    PHP面向对象整理
    PHP基础知识汇总(三)
    PHP基础知识汇总(二)
  • 原文地址:https://www.cnblogs.com/linghaoxinpian/p/6115974.html
Copyright © 2011-2022 走看看