IOC与DI

我们在开发企业级项目时,讲究的是拓展性强,而对性能的要求没有像互联网公司要求的那样高,这个时候我们可以用到spring.net,之前已经有了抽象工厂降低

模块之间的耦合性,其原理是通过反射,而spring.net也是基于这样的原理。


IOC(容器): 实例的创建不再由我们自己来控制,而是由容器来控制   

我们可以将容器理解成创建实例的工厂,只是这个容器控制了程序之间的关系,而非传统中直接由代码控制

DI(依赖注入,没有IOC就没有DI):我们可以通过配置xml文件,给对象设置一些默认值,容器在创建对象的时候,
读取配置文件,然后给对象赋默认值

IObjectFactory是初始化,配置及管理对象的实际容器的接口
IApplicationContext是IObjectFactory的超级,我们一般用IApplicationContext来作为容器的接口


要用spring.net 必须先要引入程序集 Commom.Logging.dll 以及 Spring.Core.dll (要引入的程序集放到当前项目的packetages包里)
webconfig中进行配置
<configuration>
  <configSections>
    <!--Spring.Net块配置-->
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/>
    </sectionGroup>

 <!--Spring.Net 的容器的配置-->
  <spring>
     spring
      <context>
        <resource uri="file://~/Config/common.xml"/>
      </context>
  </spring>
  </configSections>
</configuration>

在common.xml文件中进行如下配置
<?xml version="1.0" encoding="utf-8" ?>
<!--objects是配置容器里的对象-->
<objects xmlns="http://www.springframework.net">
  <!--如果使用单机缓存的话请去掉下面这个配置类的注释-->
  <!--<object name="CacheWriter" type="Company.OA.Common.Cache.HttpRuntimeCacheWriter,Company.OA.Common" singleton="false" >
  </object>-->

  <!--启用了memcached分布式缓存的配置-->
  <object name="CacheWriter" type="Company.OA.Common.Cache.MemcacheWriter,Company.OA.Common" singleton="false" >
  </object>
   
  <!--type的第一个参数是当前类的全名称,第二个参数是当前类所在的程序集-->
  <object name="CacheHelper" type="Company.OA.Common.Cache.CacheHelper,Company.OA.Common" singleton="false" >
    <property name="CacheWriter" ref="CacheWriter" />
  </object>
</objects>

以上的俩个文件吗我们可以合并在一个xml文件中,比如说,我们将上面的俩个文件都放到web.config中.

<configuration>
  <configSections>
    <!--Spring.Net块配置-->
    <sectionGroup name="spring">
      <section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/>
      <section name="context" type="Spring.Context.Support.DefaultSectionHandler"/>
    </sectionGroup>


 <!--Spring.Net 的容器的配置-->
  <spring>
     spring
      <context>
        <resource uri="Config://spring/objects"/>
      </context>


      <objects xmlns="http://www.springframework.net">


         <!--如果使用单机缓存的话请去掉下面这个配置类的注释-->
         <!--<object name="CacheWriter" type="Company.OA.Common.Cache.HttpRuntimeCacheWriter,Company.OA.Common" singleton="false" >
            </object>-->


         <!--启用了memcached分布式缓存的配置-->
         <object name="CacheWriter" type="Company.OA.Common.Cache.MemcacheWriter,Company.OA.Common" singleton="false" >
         </object>
   
         <!--type的第一个参数是当前类的全名称,第二个参数是当前类所在的程序集-->
         <object name="CacheHelper" type="Company.OA.Common.Cache.CacheHelper,Company.OA.Common" singleton="false" >
         <property name="CacheWriter" ref="CacheWriter" />
         </object>
      </objects>
  </spring>


  </configSections>
</configuration>


代码中调用配置
    public static ICacheWriter CacheWriter { get; set; }
    //通过容器创建一个对象。
    IApplicationContext ctx = ContextRegistry.GetContext();
    CacheHelper.CacheWriter = ctx.GetObject("CacheWriter") as ICacheWriter;


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值