打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
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 前者方法名和值是个键值,后者是个注入的参数顺序和方法的参数顺序对应的集合。

转载本博客上的文章需要注明来源,请尊重作者的原创内容,否则有权追求其法律责任。
分类: spring.net
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
Spring.NET学习笔记15——AOP的配置(基础篇) Level 200
Spring.NET教程(七)
C# task 传多个参数
C#中equals和==的区别
例子:用委托实现事件
.NET设计模式(11):组合模式(Composite Pattern)
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服