Maison  >  Article  >  développement back-end  >  Partager un exemple de didacticiel d'introduction à l'IoC

Partager un exemple de didacticiel d'introduction à l'IoC

零下一度
零下一度original
2017-06-24 09:54:032063parcourir

Spring.Net inclut l'inversion de contrôle (IoC) et l'orientation d'aspect (AOP). Cet article parle principalement de la prise en main d'IoC.

1. Créez d'abord un projet MVC nommé SpringDemo, puis utilisez NuGet pour télécharger Spring (j'utilise le support Spring.Net NHibernate 4)

2. , les trois principaux codes de classe de IUserInfo, UserInfo et Order sont les suivants :

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; }
    }

3. Entrez dans l'étape critique : modifier le fichier de configuration. Modifiez directement dans web.config comme suit :

<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 配置结束 ******************-->

Quatrièmement, testez le code, créez un nouveau contrôleur, le code est le suivant :

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

5. Ajoutez @ViewBag.msg à la réception. Les résultats en cours sont les suivants :

6. Je le fais si je veux séparer le fichier de configuration ? Pour tester l'effet, créez une nouvelle classe NewUserInfo avec le code suivant :

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. Créez object.xml sous le nouveau dossier Config et définissez les propriétés pour générer le contenu du répertoire comme suit :

<?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. Modifiez web.config et spécifiez objects.xml comme dépendance de résolution

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

9. Créez l'action NewUserInfo sous le contrôleur Home Le code est le suivant :

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

10. Ajoutez @ViewBag.msg au premier plan. desk. Les résultats en cours sont les suivants :

Résumé : IoC nous apporte beaucoup de commodité quand nous pensons qu'utiliser une simple usine n'est pas. bien, nous pouvons utiliser IoC à la place, et la plupart d'entre eux prennent en charge AOP.

Je vous souhaite bonne chance

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn