Dot-Net

使用裝飾器模式的 Ninject 依賴注入

  • January 18, 2012

說,我有這樣的類層次結構:

public interface IRepository { }

public class SomeSimpleRepository : IRepository {}

現在我想用附加功能“裝飾” SomeSimpleRepository

public class MoreAdvancedRespository : IRepository 
{ 
   private readonly IRepository _originalRepository;

   public MoreAdvancedRespository(IRepository original) 
   { }
}

過一會再來一個。。

public class TrickyRepository : IRepository
{
   private readonly IRepository _originalRepository;

   public TrickyRepository (IRepository original) 
   { }
}

現在,我需要完成綁定。在應用程序中,我需要 TrickyRepository 的實例,以使用 MoreAdvancedRespository 進行初始化。所以,我需要寫一些類似的東西:

Bind<IRepository>().To<TrickyRepository>.With ??

在這裡我很困惑,我需要以某種方式說,採用 MoreAdvancedRespository 但使用 SomeSimpleRepository 對其進行初始化。這是一種依賴關係鏈,必須針對一個介面進行解析。

有人對此有建議嗎?

使用WhenInjectedInto

Bind<IRepository>().To<MoreAdvancedRespository>
                  .WhenInjectedInto<TrickyRepository>();
Bind<IRepository>().To<SomeSimpleRepository>
                  .WhenInjectedInto<MoreAdvancedRespository>();

有關更多資訊,請參閱此部落格文章

引用自:https://stackoverflow.com/questions/8910519