I write some C# class libary and I want to use Ninject to provide dependency injection for my classes. Is it possible for class libary to declare some code (method) that would be executed each fime the class libary is loaded. I need this to define bindings for Ninject.
Share
I have used Ninject quite a bit over the last 9 months. Sounds like what you need to do is “load” your modules that exist in your libray into the Ninject kernel in order to register the bindings.
I am not sure if you’re using Ninject 1.x or the 2.0 beta. The two versions perform things slightly differently, though conceptually, they are the same. I’ll stick with version 1.x for this discussion. The other piece of information I don’t know is if your main program is instantiating the Ninject kernel and your library is simply adding bindings to that kernel, or if your library itself contains the kernel and bindings. I am assuming that you need to add bindings in your library to an existing Ninject kernel in the main assembly. Finally, I’ll make the assumption that you are dynamically loading this library and that it’s not statically linked to the main program.
The first thing to do is define a ninject module in your library in which you register all your bindings — you may have already done this, but it’s worth mentioning. For example:
Now that your bindings are contained within a Ninject module, you can easily register them when loading your assembly. The idea is that once you load your assembly, you can scan it for all types that are derived from StandardModule. Once you have these types, you can load them into the kernel.
One thing to note, you can generalize the above code further to load multiple libraries and register multiple types. Also, as I mentioned above, Ninject 2 has this sort of capability built-in — it actually has the ability to scan directories, load assemblies and register modules. Very cool.
If your scenario is slightly different than what I’ve outlined, similar principles can likely be adapted.