基础2

王朝学院·作者佚名  2016-05-16
窄屏简体版  字體: 小  |  中  |  大  |  超大  

sPRing.net (3)依赖注入基础2如何调用其他对象的成员

接上文例子:

现在Person有一个属性 name 静态属性 eye 域 gender

public class Person { public string name { get; set; } public static object eye { get; set; } public string gender; public Pet pet { get; set; }public object seefrisbee(object color) { return string.Format("{0}看到{1}追着{2}颜色的飞盘", name,pet.name,color); } ~Person() { Console.WriteLine(name + "离开"); } }

对属性赋值:

<object id="person" type="SpringDemo.Person,SpringDemo" singleton="true" > <property name="pet" ref="dog" ></property> <property name="name" value="Yahue"></property> <property name="gender" value="男"></property> <property name="eye" value="忧郁的眼神"></property> <listener event="frisbeefly" method="seefrisbee"> <ref object="dog"/> </listener> </object>

name

<object id="personname" type="Spring.Objects.Factory.Config.PropertyRetrievingFactoryObject, Spring.Core"> <property name="TargetObject" ref="person"></property> <property name="TargetProperty" value="name"></property> </object>

eye

<!--静态属性的调用--> <object id="personeye" type="Spring.Objects.Factory.Config.PropertyRetrievingFactoryObject, Spring.Core"> <property name="StaticProperty" value="SpringDemo.Person.eye"></property> </object>

gender

<object id="persongender" type="Spring.Objects.Factory.Config.FieldRetrievingFactoryObject, Spring.Core"> <property name="TargetObject" ref="person"/> <property name="TargetField" value="gender"/> </object>

执行:

Console.WriteLine(ctx.GetObject("personname")); Console.WriteLine(ctx.GetObject("persongender")); Console.WriteLine(ctx.GetObject("personeye")); Console.ReadLine();

输出结果:

Yahue男拥有迷离而又忧郁的眼神

调用其他对象的方法:

Person有了静态say的方法:

public class Person { public string name { get; set; } public static object eye { get; set; } public string gender; public Pet pet { get; set; } public static string say(string Word1,string word2,string word3) { return string.Format("说:{0}-{1}-{2}", word1, word2, word3); } public object seefrisbee(object color) { return string.Format("{0}看到{1}追着{2}颜色的飞盘", name,pet.name,color); } ~Person() { Console.WriteLine(name + "离开"); } }

xml

<object id="personsay" type="Spring.Objects.Factory.Config.MethodInvokingFactoryObject, Spring.Core"> <property name="TargetType" value="SpringDemo.Person,SpringDemo"></property> <property name="TargetMethod" value="say"></property> <property name="Arguments"> <list> <value>啊</value> <value>大海啊</value> <value>全是水</value> </list> </property> </object>

Console.WriteLine(ctx.GetObject("personsay"));

输出:

说:啊-大海啊-全是水

现在有个非静态的say2方法:

public class Person { public string name { get; set; } public static object eye { get; set; } public string gender; public Pet pet { get; set; } public static string say(string word1,string word2,string word3) { return string.Format("说:{0}-{1}-{2}", word1, word2, word3); } public string say2(string word1, string word2, string word3) { return string.Format("说:{0}-{1}-{2}", word1, word2, word3); } public object seefrisbee(object color) { return string.Format("{0}看到{1}追着{2}颜色的飞盘", name,pet.name,color); } ~Person() { Console.WriteLine(name + "离开"); } }

<object id="personsay2" type="Spring.Objects.Factory.Config.MethodInvokingFactoryObject, Spring.Core"> <property name="TargetObject" ref="person"></property> <property name="TargetMethod" value="say2"></property> <property name="NamedArguments"> <dictionary> <entry key="word1" value="啊!"></entry> <entry key="word2" value="大海啊!"></entry> <entry key="word3" value="全是水!"></entry> </dictionary> </property> </object>

注意ref的值是待调用对象的实例

调用:

Console.WriteLine(ctx.GetObject("personsay2"));

执行结果:

说:啊!-大海啊!-全是水!

注意:方法参数的传递有两种方式:NamedArguments和Arguments 前者方法名和值是个键值,后者是个注入的参数顺序和方法的参数顺序对应的集合。

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航