Инъекция зависимых зависимостей с помощью шаблона Decorator
Скажем, у меня есть такая иерархия классов:
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. Это своего рода цепочка зависимостей, которые должны быть разрешены для одного интерфейса.
У кого-нибудь есть предложения по этому поводу?
1 ответ
Решение
Использование WhenInjectedInto
:
Bind<IRepository>().To<MoreAdvancedRespository>
.WhenInjectedInto<TrickyRepository>();
Bind<IRepository>().To<SomeSimpleRepository>
.WhenInjectedInto<MoreAdvancedRespository>();
Смотрите этот блог для получения дополнительной информации.