Spring.NET学习笔记(1)-基本依赖注入
2009-08-25 11:12 Clingingboy 阅读(1244) 评论(0) 编辑 收藏 举报不学Spring,系统照样能跑,学会了Spring会发现跟没学会之前也多大差别,一直在用Spring以后就会感觉不用Spring写程序就好像无从下手,Spring就是一容器,用以组装程序而用。
一.依赖注入
分三种方式
(1)构造注入
<object id="foo" type="X.Y.Foo, Example"> <constructor-arg ref="bar"/> <constructor-arg ref="baz"/> </object> <object id="bar" type="X.Y.Bar, Example"/> <object id="baz" type="X.Y.Baz, Example"/>
(2)Setter属性注入
<object id="exampleObject" type="Examples.ExampleObject, ExamplesLibrary"> <!-- setter injection using the ref attribute --> <property name="objectOne" ref="anotherExampleObject"/> <property name="objectTwo" ref="yetAnotherObject"/> <property name="IntegerProperty" value="1"/> </object> <object id="anotherExampleObject" type="Examples.AnotherObject, ExamplesLibrary"/> <object id="yetAnotherObject" type="Examples.YetAnotherObject, ExamplesLibrary"/>
(3)方法注入
3.1
public class TestObjectFactory { public const string TheName = "Old Goriot"; public const int TheAge = 78; public virtual object GetObject() { return new TestObject(TheName, TheAge); } }
<object id='factory' type='Spring.Objects.Factory.Support.TestObjectFactory, Spring.Core.Tests'> <lookup-method name='GetObject' object='target'/> </object> <object id='target' type='Spring.Objects.TestObject, Spring.Core.Tests' singleton='false'> <property name='name' value='Fiona Apple'/> <property name='age' value='47'/> </object>
3.2方法替换
public class MyValueCalculator { public virtual string ComputeValue(string input) { // ... some real code } // ... some other methods } public class ReplacementComputeValue : Spring.Objects.Factory.Support.IMethodReplacer { public object Implement(object target, MethodInfo method, object[] arguments) { // get the input value, work with it, and return a computed result... string value = (string)arguments[0]; // compute... return result; } }
将MyValueCalculator 的ComputeValue方法替换成,实现IMethodReplacer 接口的Implement方法
<object id="myValueCalculator" type="Examples.MyValueCalculator, ExampleAssembly"> <!-- arbitrary method replacement --> <replaced-method name="ComputeValue" replacer="replacementComputeValue"> <arg-type match="String"/> </replaced-method> </object> <object id="replacementComputeValue" type="Examples.ReplacementComputeValue, ExampleAssembly"/>
这个方法明显很变态,完全破坏了封装,一般很少用