Spring.NET学习笔记(1)-基本依赖注入

     不学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">

  
  <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">
  
  <replaced-method name="ComputeValue" replacer="replacementComputeValue">
    <arg-type match="String"/>
  replaced-method>
object>

<object id="replacementComputeValue" type="Examples.ReplacementComputeValue, ExampleAssembly"/>

这个方法明显很变态,完全破坏了封装,一般很少用

你可能感兴趣的:(K.Spring.net,object,spring,string,setter,class,input)