It's been a while since the last release (september 2010) but there is a major new feature which warrants a new one. And since i've noticed an increased interest in Agatha in the past few weeks, the timing could not have been better.
One of the few (IMO) problems that Agatha suffered from, was that it sorta pushed you down the inheritance-road if you wanted to deal with cross-cutting concerns. Well, not anymore. Earlier this year, Bart Deleye started working on a way to use interceptor classes to do the same thing. It enables you to write small interceptor classes which just focus on one thing and have them executed before and after requests are processed. It's sort of similar to global action filters in ASP.NET MVC3, except that it's not attribute based. The order of execution is also guaranteed to be in the order in which the interceptors were registered. Bart and his team have been using this for a while now in their own projects, and recently contributed the changes back to the project. You can read more about these interceptors here and you can find some real examples here.
Another problem that Agatha suffered from was that there was no way to definitively know which type of Response corresponded with a certain type of Request. Because that was important to the interceptors feature, Bart went ahead and implemented something for that as well, so you can now define request/response conventions which can be used in your code. You can read about those here.
Those are the two most important new features, but some of you will be glad to hear that we finally have nuget packages as well. Because of the problem i described here, i ended up with 8 nuget packages:
- Agatha-Common-Castle-Windsor
- Agatha-ServiceLayer-Castle-Windsor
- Agatha-Common-Ninject
- Agatha-ServiceLayer-Ninject
- Agatha-Common-StructureMap
- Agatha-ServiceLayer-StructureMap
- Agatha-Common-Unity
- Agatha-ServiceLayer-Unity
The packages for Castle Windsor, Unity and Ninject each support Silverlight as well. All container dependencies are now based on their latest Nuget packages. With Agatha 1.2, it was clear that the majority of people downloaded the source code instead of the binary release (i presume to build against whatever version of container they used) so you can still get the entire source package on Google Code or on Github. I didn't create another binary package since i figured that most people who want that will be using Nuget anyway.
The two other changes are:
- now possible to POST to the IWcfRestJsonRequestProcessor (contributed by Andrew Rea)
- our container abstraction allows key-based resolving (contributed by Nikos Baxevanis)
My favorite part about this release is that all of the new code has been contributed by other people ![]()
For 1.4, the focus might be more about making Agatha as easy as possible to consume from JavaScript, which may or may not introduce a new REST based service interface. Though none of that is certain at this point, so we'll see how it goes ![]()
