如何使用Ninject对装饰器进行绑定?

Rus*_*ino 9 ninject decorator inversion-of-control

基于这个问题:应该将哪种服务注入基类?(与静态类相比).

如何使用Ninject对装饰器进行绑定?或任何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();
}
Run Code Online (Sandbox Code Playgroud)

Rem*_*oor 15

你必须使用条件绑定,例如

Bind<IRepository>().To<Repository>().WhenInjectedInto<CachedRopsitory>();
Bind<IRepository>().To<CachedRepository>().WhenInjectedInto<CachedLoggedRepository>();
Bind<IRepository>().To<CachedLoggedRepository>();
Run Code Online (Sandbox Code Playgroud)

  • +1在某些(更罕见的)情况下,您可能正在使用基于泛型的`TImpl`,在这种情况下,您将`绑定<TAbstraction <>>().如上所述<TImpl <>()` - 在你根据注入的具体类型的基本泛型类型使用稍微不同的`.When` ...子句[约束](https://github.com/ninject/ninject/wiki/Contextual-Binding) .要记住的另一个有用的事情是,如果你发现你需要的东西与所需的东西略有不同,你可以获得Ninject源并通过它查找文件/静态分析以查找示例 - 例如,查看`WhenInjectedInto` (2认同)