This is how you can use Castle Windsor inversion of control container with Db4o. In this example I use the Db4o Server rather than the embedded version.
That's because I want to be able to make multiple connections to Db4o in an ASP.NET MVC 3 application. So here is how it is. (It is rather short because it is so easy, or perhaps I'm missing things? Let me hear it if I do!).
First, open the package manager console and add the following packages:
Install-Package db4o-cs-devel Install-Package Castle.Windsor
And in the TestProject:
Install-Package Nunit
To get started with ASP.NET MVC 3 and Castle Windsor, just follow this excellent documentation. Don't forget however to put this line in your web.config, in the System.Web section:
<httpModules> <add name="PerRequestLifestyle" type="Castle.MicroKernel.Lifestyle.PerWebRequestLifestyleModule, Castle.Windsor" /> </httpModules>
I decided to use a generic repository. Since I use a Db4o Server (see the docs), connecting to that Windows Service returns a Db4o session (IObjectContainer). So I can use that session in the Repository.
This is also very testable.
But first let's hook it up in Windsor:
Isn't that simple?
We'll use the IObjectContainer like this in the repository:
And finally, the Controller looks like this:
Please check out the source code here.
The Buttonfactory Db4o Windows Service
I know, this has been done before, here and here, and these people did it much better than I did, but I thought it would be nice to write a Db4o Windows service myself. Just as an exercise. I also wrote a WPF frontend so you can control the service easily:
You can download The ButtonFactory Db4o Windows Service and Configuration Tool here: Db4o.Service.Installer.Setup. Mind you, it is all very beta and I really need to test concurrency.
Here is the complete source code.
Pretty cool! You can get the same behavior from an embedded db4o object server with the benefit of not using network communication. See:
http://developer.db4o.com/documentation/reference/db4o-8.0/net35/reference/Content/client-server/embedded.htm
But maybe given the architecture you really need db4o’s networked c/s mode?
Best!