>  기사  >  백엔드 개발  >  IoC 입문 튜토리얼 예시 공유

IoC 입문 튜토리얼 예시 공유

零下一度
零下一度원래의
2017-06-24 09:54:032097검색

Spring.Net에는 IoC(Inversion of Control) 및 AOP(Aspect Orientation)가 포함되어 있습니다. 이 기사에서는 주로 IoC 시작에 대해 설명합니다.

1. 먼저 SpringDemo라는 MVC 프로젝트를 만든 다음 NuGet을 사용하여 spring을 다운로드합니다(저는 Spring.Net NHibernate 4 지원을 사용합니다).

2. 클래스 디자인, 주로 IUserInfo, UserInfo, Thecodes 폴더 아래에 클래스를 만듭니다. 세 가지 Order 클래스의 경우 다음과 같습니다.

public interface IUserInfo
    {string ShowMeg();
    }
public class UserInfo : IUserInfo
    {public string UserName { get; set; }public Order OrderBy { get; set; }public string ShowMeg()
        {return "姓名:" + UserName + "订单号:" + OrderBy.OrderNo;
        }
    }
public class Order
    {public string OrderNo { get; set; }
    }

셋째, 핵심 단계를 입력합니다. 구성 파일을 수정합니다. web.config에서 다음과 같이 직접 수정합니다:

<sectionGroup name="spring">  <!--解析spring块的对象-->  <section name="context" type="Spring.Context.Support.ContextHandler,Spring.Core"/>  <!--配置解析spring存放对象的容器集合-->  <section name="objects" type="Spring.Context.Support.DefaultSectionHandler,Spring.Core"/></sectionGroup>
  </configSections><!--****************** Spring 配置开始 ******************-->
  <spring><context>  <!--容器配置,配置当前容器对象放在上面位置:当前是在现在的配置文件中-->  <resource uri="config://spring/objects" /><!--当前--></context><objects xmlns="http://www.springframework.net">  <!--这里存放容器所有节点-->  <description>An example that demonstrates simple Ioc features</description>  <!-- name 必须唯一 可以随意命名,一般为类型名称,type=类的全部名称,所在程序集,目的是为了让容器轻松的反射创建对象-->  <object name="UserInfo" type="SpringDemo.Models.UserInfo,SpringDemo"><property name="UserName" value="老王" /><!--ref 指向下面的属相注入--><property name="OrderBy" ref="Order" />  </object>  <object name="Order" type="SpringDemo.Models.Order,SpringDemo"><property name="OrderNo" value="20170808" />  </object></objects>
  </spring>
  <!--****************** Spring 配置结束 ******************-->

4. 코드 테스트, 새로운 컨트롤러 생성, 코드는 다음과 같습니다:

public ActionResult Index()
        {
            IApplicationContext ctx = ContextRegistry.GetContext();
            IUserInfo lister = (IUserInfo)ctx.GetObject("UserInfo");
            ViewBag.msg = lister.ShowMeg();return View();
        }

5. 프런트 데스크에 @ViewBag.msg를 추가하고 실행 중인 결과는 다음과 같습니다.

6 이전에 모두 완료되었지만 구성 파일을 분리하려면 어떻게 해야 할까요? 테스트 효과를 얻으려면 NewUserInfo라는 새 클래스를 생성하세요.

public class NewUserInfo : IUserInfo
    {public NewUserInfo(string name, Order order)
        {this.UserName = name;this.OrderBy = order;
        }public string UserName { get; set; }public Order OrderBy { get; set; }public string ShowMeg()
        {return "姓名:" + UserName + "订单号:" + OrderBy.OrderNo;
        }
    }

7. 새 폴더 Config 아래에 object.xml을 생성하고 디렉터리에 대한 속성 설정을 생성합니다. 내용은 다음과 같습니다.

<?xml version="1.0" encoding="utf-8" ?><objects xmlns="http://www.springframework.net">
  <!--这里存放容器所有节点-->
  <description>An example that demonstrates simple Ioc features</description>
  
  <!--构造函数注入-->
  <object name="NewUserInfo" type="SpringDemo.Models.NewUserInfo,SpringDemo"><constructor-arg index="0" value="张学友"/><constructor-arg index="1" ref="Order"/>
  </object>
  <!--复杂依赖注入-->
  <object name="Order" type="SpringDemo.Models.Order,SpringDemo"><property name="OrderNO" value="20170909"/>
  </object> 
  </objects>

8. web.config를 수정하고 object.xml을 해상도 종속성으로 지정합니다.

<resource uri="~/Config/objects.xml" /><!--指定文档-->

9. 홈 컨트롤러 아래에 Action NewUserInfo를 생성합니다. 코드는 다음과 같습니다.

public ActionResult NewUserInfo()
        {
            IApplicationContext ctx = ContextRegistry.GetContext();
            IUserInfo lister = (IUserInfo)ctx.GetObject("NewUserInfo");
            ViewBag.msg = lister.ShowMeg();return View();
        }

10. 프런트 데스크에 @ 표시를 추가합니다. ViewBag.msg의 실행 결과는 다음과 같습니다.

요약: IoC는 우리에게 많은 편의를 제공합니다. 단순한 팩토리를 사용하는 것이 좋지 않다고 느낄 때 대신 IoC를 사용할 수 있으며 대부분 AOP를 지원합니다.

행운을 빕니다

위 내용은 IoC 입문 튜토리얼 예시 공유의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.