依赖注入:属性和构造函数的注入

一个简单的Demo:

IUserInfoDal接口:

public  interface IUserInfoDal
{
void Show();
string Name { get; set; }
}
}

UserInfoDal继承IUserInfoDal:

 public class UserInfoDal:IUserInfoDal
{ public void Show()
{
Console.WriteLine("hellow world");
}
}

建立SpringNetDemo的控制台应用程序:

static void Main(string[] args)
{
//IUserInfoDal userInfoDal = new UserInfoDal();
//userInfoDal.Show(); //容器来 创建UserInfoDal实列 //第一步 初始化容器
IApplicationContext ctx = ContextRegistry.GetContext(); IUserInfoDal dal = ctx.GetObject("UserInfoDal") as IUserInfoDal;
dal.Show(); Console.ReadKey();
}

在App中进行配置:(<configuration> 节点中

 <!--sectionGroup  中的name要与 下面的标签名字一样 spring-->
<configSections>
<sectionGroup name="spring">
<!--spring 分成两个子块-->
<section name="context" type="Spring.Context.Support.ContextHandler, Spring.Core"/>
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core" />
</sectionGroup>
</configSections>

对sectionGroup的name进行配置:

<spring>
<!--Spring.Net对象容器的配置-->
<context>
<!--容器里面的所有的对象在哪里配置的?--> <!--使用xml文件的配置-->
<!--<resource uri="file://Dals.xml"/>-->
<!--使用程序集的配置-->
<!--<resource uri="assembly://SpringNetDemo/SpringNetDemo/Dals.xml"/>--> <resource uri="config://spring/objects"/> </context>
<!--objects:配置的容器的里面的对象的-->
<objects xmlns="http://www.springframework.net">
<description>An example that demonstrates simple IoC features.</description> <!--名字为类名-->
<!--<object name="UserInfoDal" type="SpringNetDemo.UserInfoDal, SpringNetDemo">-->
<object name="UserInfoDal" type="SpringNetDemo.EFUserInfoDal, SpringNetDemo">
<!--属性的配置-->
<property name="Name" value="Spring牛"/>
</object>
<!-- 把UserInfoDal属性注入到UserInfoServce-->
<!--<object name="UserInfoServce" type="SpringNetDemo.UserInfoServce, SpringNetDemo">
<property name="UserInfoDal" ref="UserInfoDal"/>
</object>--> </objects>
</spring>

XMl文件中的配置:

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.net
http://www.springframework.net/xsd/spring-objects.xsd"> <object name="UserInfoDal1" type="SpringNetDemo.UserInfoDal, SpringNetDemo">
<!--<constructor-arg index="0" value="movies.txt"/>-->
</object> </objects>

Spring.Net与项目结合:

1.在Web.Config中configuration  节点中进行配置

 <configSections>
<!-- Entity Framework 块配置-->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> <!--Spring.Net块配置-->
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.MvcContextHandler, Spring.Web.Mvc4"/>
</sectionGroup>
</configSections> <!--Spring.Net 的容器的配置节点-->
<spring>
<context>
<resource uri="file://~/Config/services.xml"/>
<resource uri="file://~/Config/controllers.xml"/>
</context>
</spring>

2.在Global.asax中改成Spring.Web

 public class MvcApplication :Spring.Web.Mvc.SpringMvcApplication

3.在packages中引入dll文件

4.在Portal中新建文件夹Config

1.controllers.xml

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"> <!--前面是类的全名称 后面是类的程序集 singleton="false" 每次都是创建一个心对象 不是共用一个对象 -->
<object type="SunOA.UI.Portal.Controllers.UserInfoController,SunOA.UI.Portal" singleton="false" >
<!--属性的注入-->
<property name="UserInfoService" ref="UserInfoService" />
</object>
</objects>

2.services.xml

<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"> <object name="UserInfoService" type="SunOA.BLL.UserInfoService, SunOA.BLL" singleton="false" >
</object>
<object name="OrderInfoService" type="SunOA.BLL.OrderInfoService, SunOA.BLL" singleton="false" >
</object> </objects>

3.控制器。

 public IUserInfoService UserInfoService { get; set; }
public ActionResult Index()
{
ViewData.Model = UserInfoService.GetEntites(u => true);
return View();
}

BLL层的代码(继承于接口):
  

   public class OrderInfoService : BaseService<OrderInfo>, IOrderInfoService
    public interface IUserInfoService : IBaseService<UserInfo>

IBLL层的代码:

    public interface IOrderInfoService : IBaseService<OrderInfo>

Spring.Net程序的作用:

1.程序加载的时候,第一次请求过来的时候,初始化容器对象。

2.加载XML文件放到内存里面。

3.根据容器里面的XML配置创建对象

4.第二次和以后请求过的时候重复 第三个步骤

OA项目Ioc DI(二)的更多相关文章

  1. OA项目实战(二) 开发准备

    上次的博文OA系统实践(一) 概述中,我们已经了解了OA的相关概念.从本次博文开始,我们做一个简单的OA实例. 在OA开发之前,有几个工作们需要提前做.一个是对需求进行分析,另一个是对开发环境进行选择 ...

  2. 第一周博客之二---OA项目环境搭建及开发包部署

    OA项目环境搭建 一个项目想要能够在开发人员打包好项目包之后进行测试,就必须进行项目测试环境的搭建,要根据开发工程师的开发环境采用不同的测试环境,以下只是浅谈下Java项目OA(办公自动化平台)的环境 ...

  3. Spring系列(二):Spring IoC/DI的理解

    这几天重新学习了一下Spring,在网上找了相关的ppt来看,当看到Spring IoC这一章节的时候,先大致浏览了一下内容,有将近50页的内容,内心窃喜~QAQ~,看完这些内容能够对IoC有更深层次 ...

  4. Spring 学习教程(二): IOC/DI+AOP

    1. IOC / DI Spring是一个基于IOC和AOP的结构J2EE系统的框架 IOC 反转控制 是Spring的基础,Inversion Of Control 简单说就是创建对象由以前的程序员 ...

  5. Spring框架-IOC/DI详细学习

    一.IOC/DI概念 参考博客:https://www.cnblogs.com/xdp-gacl/p/4249939.html IOC(inversion of control, 控制反转)是一种设计 ...

  6. AutoFac IoC DI 依赖注入

    AutoFac IoC DI 依赖注入 记录点点滴滴知识,为了更好的服务后来者! 一.为什么使用AutoFac? 之前介绍了Unity和Ninject两个IOC容器,但是发现园子里用AutoFac的貌 ...

  7. SSH项目搭建(二)

    本章讲解SSH项目需要到哪些jar包,及各个jar包的作用 一.struts2 1.下载好struts2,struts2文件夹>>>>apps>>>>a ...

  8. 【Java EE 学习 67 上】【OA项目练习】【JBPM工作流的使用】

    OA项目中有极大可能性使用到JBPM框架解决流程控制问题,比如请假流程.报销流程等等. JBPM:JBoss Business Process Management,翻译过来就是业务流程管理.实际上就 ...

  9. 关于依赖注入IOC/DI的感想

    之前一直不明白依赖注入有什么好处,甚至觉得它是鸡肋,现在想想,当时真是可笑. 这个想法正如同说接口是没有用处一样. 当整个项目非常庞大,各个方法之间的调用非常复杂,那么,可以想象一下,假设说没有任何的 ...

随机推荐

  1. SystemV-IPC

    这里记录的三种SystemV-IPC包括(消息队列,信号量以及共享内存) 1:标识符和键值 键值(key_t) : IPC结构的外部名(所谓外部名就是各用户进程可获得并操作的,通过它使用XXXget获 ...

  2. [LeetCode] 382. Linked List Random Node ☆☆☆

    Given a singly linked list, return a random node's value from the linked list. Each node must have t ...

  3. 100 Most Popular Machine Learning Video Talks

    100 Most Popular Machine Learning Video Talks 26971 views, 1:00:45,  Gaussian Process Basics, David ...

  4. php设计模式之六大设计原则

      1.单一职责 定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责. 场景:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修改类T时,有可能会导致 ...

  5. 《设计模式》-原则六:迪米特法则(LoD)

    啊哈哈哈哈,又到星期五了,真开心.回来吃完饭慌着去玩游戏,所以立马过来先完成今天的学习目标. 这个原则的命名好像是以某个人的名字命名的,算了我不去管这个了. 直接说说我学到的东西,这个迪米特法则又可以 ...

  6. 截取汉字 mb_sbstr()

    一.中文截取:mb_substr() mb_substr( $str, $start, $length, $encoding ) $str,需要截断的字符串 $start,截断开始处,起始处为0 $l ...

  7. NameValuePair方式传参数

    今天工作中联调外部的一个接口用post方式传输,我按照文档封装参数成Jason字符串传入,但是对方一直接受参数为空,折腾了半天也没找到问题.很苦恼,检查代码都没有错误,可是为什么对方接受参数为空呢?然 ...

  8. Linux基础操作-分区概念

    开启Linux系统前添加一块大小为20G的SCSI硬盘 开启系统,右击桌面,打开终端 为新加的硬盘分区,一个主分区大小为10G,剩余空间给扩展分区,在扩展分区上划分两个逻辑分区,大小各5G 进入分区工 ...

  9. POI读取Excel数据保存到数据库,并反馈给用户处理信息(导入带模板的数据)

    今天遇到这么一个需求,将课程信息以Excel的形式导入数据库,并且课程编号再数据库中不能重复,也就是我们需要先读取Excel提取信息之后保存到数据库,并将处理的信息反馈给用户.于是想到了POI读取文件 ...

  10. Python标准库笔记(10) — itertools模块

    itertools 用于更高效地创建迭代器的函数工具. itertools 提供的功能受Clojure,Haskell,APL和SML等函数式编程语言的类似功能的启发.它们的目的是快速有效地使用内存, ...