For all of you who don't know what Spring is (as myself a week ago):
"Spring.NET is an open source application framework that makes building enterprise .NET applications easier. Providing components based on proven design patterns that can be integrated into all tiers of your application architecture, Spring helps increase development productivity and improve application quality and performance."
I was especially interested in the IoC/DI (Inversion of Control, Dependency Injection) and Expression Evaluation areas.
First I defined a contract:
public interface IModulePlugin : IDisposable
{
void Initialize();
void Execute();
string Name { get; set; }
int Value { get; set; }
DateTime Date { get; set; }
}
and did two interface implementations (you may imagine the code). I then wrote some code to instantiate my loosely coupled modules:
// use spring
IApplicationContext ctx = ContextRegistry.GetContext();
// get "a" loosely coupled (DI/IoC) module
using (IModulePlugin aModule = (IModulePlugin)ctx.GetObject("aModule"))
{
aModule.Execute();
}
// get "another" loosely coupled (DI/IoC) module
using (IModulePlugin aModule = (IModulePlugin)ctx.GetObject("anotherModule"))
{
aModule.Execute();
}
// try exprission features
TimeSpan t = (TimeSpan)ExpressionEvaluator.GetValue(null, "DateTime.Today - date('13/02/1970 06:10:00')");
Console.WriteLine("My age is " + t.ToString() + " [days]");
that is configured in the app.config as follows:
<objects xmlns="http://www.springframework.net">
<object name="anotherModule" type="Spring.Modules.ModulePlugin, Spring.Modules" singleton="false" init-method="Initialize">
<property name="Name" value="Leder" />
<property name="Value" value="14" />
<property name="Date" value="13.02.1970" />
</object>
<object name="aModule" type="Spring.Modules.AnotherModulePlugin, Spring.Modules" singleton="false" init-method="Initialize" destroy-method="Dispose">
<property name="Name" value="Markus" />
<property name="Value" value="13" />
<property name="Date" value="15.06.2007" />
</object>
</objects>
Nice and no dependencies...
No comments:
Post a Comment