首页 > 代码库 > Spring.net Ioc 依赖注入

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 }

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

技术分享

 

Spring.net Ioc 依赖注入