Search code examples
inversion-of-controlninjectdecorator

How the binding are done with decorators using Ninject?


Based on this question : Should thoses kind of service go injected in a base class ? (versus static classes).

How the binding would be done with decorators using Ninject ? or any DIContainer ?

public class CachedLoggedRepository : IRepository
{
   public IRepository repository { get; set; }
   void Add();
}

public class CachedRepository : IRepository
{
   public IRepository repository { get; set; }
   void Add();
}

public class Repository : IRepository
{
   void Add();
}

Solution

  • You have to use conditional bindings e.g

    Bind<IRepository>().To<Repository>().WhenInjectedInto<CachedRopsitory>();
    Bind<IRepository>().To<CachedRepository>().WhenInjectedInto<CachedLoggedRepository>();
    Bind<IRepository>().To<CachedLoggedRepository>();