我们在开发企业级项目时,讲究的是拓展性强,而对性能的要求没有像互联网公司要求的那样高,这个时候我们可以用到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;