.netninjectioc-containerninject.web.mvc

Batch registering all implementations of a generic interface with Ninject


i have the following interfaces injected in Castle Windsor. how do i do the same in Ninject?

container.Register(
    AllTypes.FromAssemblyNamed("Apps.Web")
        .BasedOn(typeof(ICommandHandler<>))
        .WithService.FirstInterface());

i've tried:

this.Bind(x => x.FromAssembliesMatching("Apps.Web.dll")
     .Select(y => y.Namespace.EndsWith("Handlers"))
     .BindSingleInterface());

but getting Object reference not set to an instance of an object error.


Solution

  • You can use Ninject's convention binding extensons (install it from NuGet) to do this.

    Something like the following should work

    kernel.Bind(x => x.FromAssembliesMatching("Apps.Web")
        .SelectAllClasses()
        .InheritedFrom(typeof(ICommandHandler<>))
        .BindSingleInterface());
    

    I'm not 100% sure about the FromAssembliesMatching pattern, but you should be able to tweak that to pick up your assembly.