Posted by Tobi
One of my favorite tools for .NET development is the dependency injection framework StructureMap from Jeremy D. Miller. It's free and it's Open Source, but it's only available in the Windows world. Compared to Castle Windsor, StructureMap is much more lightweight and compact, but with the recent enhancements in the upcoming release just as powerful.
So I thought, it couldn't be so hard, to make StructureMap work with Mono and package it for Debian, but actually, it's not THAT easy.
The heavy usage of .NET 3.5 features, like lambdas, requires a recent development version of Mono. Took me 2-3 hours to have Mono and Monodevelop compiled from SVN and installed in parallel to my old Mono packages to /opt/mono. But that's working fine now.
The StructureMap VS2008 solution loads fine in Monodevelop, which makes life a lot easier. The only 3'rd party-dependency that StructureMap has, is Rhino.Mocks (another of my favorite development tools). The Rhino.Mocks assembly seems to work with Mono, but compiling it from source is probably much harder, because of it's dependency to DynamicProxy, so I decided to leave that by side for now, skip StructureMap.Automocking and concentrate on the core parts of StructureMap.
After working about a week on this, I already found three bugs in the Mono C# compiler, but the good news is, that StructureMap now compiles fine with some small patches (that Jeremy hopefully will include in the upcoming release).
Luckily, StructureMap is very well covered with unit tests, which makes testing it on Mono much easier. The state of affairs is, that most of the tests go green. I have about 70 failures within more then 600 tests and I'm pretty confident, that I can solve the remaining issues as well.