Скажем, у меня есть иерархия классов:
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. Это своего рода цепочка зависимостей, которые должны быть разрешены против одного интерфейса.
Есть ли у кого-нибудь предложения по этому поводу?