学习笔记41_Spring.Net

Spring.Net:由容器负责创建对象,容器读取配置文件来初始化对象,配置文件须符合 Spring.Net范式;

准备材料: Common.Loggin.dll,Spring.Core.dll

第一步:配置app.config,一般可以去网上找一个标准的Spring.net配置文件看看

<Spring>

  <context>

    <resource uri="config://spring/objects">//说明容器的所有的对象在哪里配置的

    <resource uri="file://Dals.xml">//此配置文件,也要放在app.config的统一目录下,而且文件也长得比较特殊

注意:对于配置文件的生成操作,如果以文件的方式,要对此文件的生成操作为嵌入资源或者始终生成

     <resource uri="assembly://MyAssembly/projectName(一般也是程序集名)/xxxx.xml">//以程序集的xml方式

  </context>

  <objects xmlns="http://......">

  <description>....</...>

  <object name="一般为类型名" type ="namespace.xxxx.类名(类的全名称),namespace(所在程序集名称) " ></..>

  </objects>

</<Spring>

第二步:使用容器创建实例

IApplicationContext ctx = ContextRegistry.GetContext();//其实就是程序集读取配置文件,创建Context

var dal = ctx.GetObject("类型名(name)") as namespace.xxxx.I类名;//其实一般要as一个接口类型,内部其实是程序集读取配置文件,在后边反射创建实例。

***就是由配置文件,决定创建什么样的,实现了某接口的实例

***所以配置文件中,要写得有规律,尽量能达到用查找/替换能一键替换的

***其他配置文件写法

<objects xmlns="http://....."  xmlns:xsi="http://www.w3.org/...."  xis:schemaLocation = "http://.....">

  <object id="..."  type="..."></object>

  <object id="..."  type="..."></object>

</objects>

Spring.Net注入方式:

属性注入:

<objects>

  <object name="xxtype1"  type="xxx.xxx.xxxtype">

  <object name="xxtype"  type="xxx.xxx.xxxtype">

    <property name="Name"  value="xxxxx">//简单属性的配置

    <property name="复杂属性" ref="xxtype1"/>//复杂属性,与上边的xxxtype1相关联

   </object>

<objects>

构造函数注入:

<object name="..." type="...">

<constructor-arg index="0" value="xxx">//给构造函数的第一个参数注入,一般情况下尽量很少用

</object>

****如果不使用构造函数,使用工厂创建的话,也可以配置

<objects>

  <objcet name="Factory1" type="类全名,程序集名" singleton="true"></..>//单列模式

  <object  name ="xxxdal"  type="类全名,程序集名" singleton="false" factory-method="getDal"  factoryobject="Factory1"></..> 

</objects>

********Spring.Net就是通过配置文件,实现各个项目层的彻底分离,运行的时候通过读取配置文件,程序集+类全名反射+接口定义,达到各个对象实例化,来实现各层项目之间的全分离,甚至不用项目之间的引用,只要生成的dll放到运行目录下即可

原文地址:https://www.cnblogs.com/pylblog/p/7182461.html