Dependency Injection
DI is a very interesting thing. You can make your design totally decoupled with concrete implementations. To see this in effect, let us create a new string
type property in our page's code named Message
with a private variable message
. And in the Page_Load
method, add the following line:
Response.Write(message);
Here we do not set the value of the message
variable. We'll set it through the Web.Config file. We now change the object
definition for Default.aspx:
<object type="Default.aspx">
<property name="Message" value="Hello from Web.Config"/>
</object>
Now we have supplied a value outside of the page using the configuration file. We have set a string type value here. We can also set an object type value. To do that, let us define a class Math
with one method:
public class Math
{
public int add(int x, int y)
{
return x+y;
}
}
Now let us add a new property Math
in the Default.aspx code file like we did for message
. In the Page_Load
method, we add code:
Response.Write(math.add(30, 50));
In Web.Config we now add new object definition just above object for Default.aspx. So our spring section becomes:
<spring>
<parsers>
</parsers>
<context>
<resource uri="config://spring/objects"/>
</context>
<objects xmlns=http://www.springframework.net
xmlns:db="http://www.springframework.net/database">
<object name="MyMathObj" type="Math, App_code" />
<!-- Pages -->
<object type="Default.aspx">
<property name="Message" value="Hello from Web.Config"/>
<property name="Math" ref="MyMathObj"/>
</object>
</objects>
</spring>