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 중국어 웹사이트의 기타 관련 기사를 참조하세요!