У меня есть эта иерархия классов:
public interface ISR { }
public interface ICU { }
public interface IFI { }
public class CU : ICU { }
public class SR : ISR
{
public SR(IFI fi)
{
FI = fi;
}
public IFI FI { get; set; }
}
public class FI : IFI
{
public FI(ISR sr, ICU cu)
{
SR = sr;
CU = cu;
}
public ISR SR { get; set; }
public ICU CU { get; set; }
}
public class Module : NinjectModule
{
public override void Load()
{
Bind<ISR>().To<SR>();
Bind<ICU>().To<CU>();
Bind<IFI>().To<FI>();
}
}
class Program
{
static void Main(string[] args)
{
var kernel = new StandardKernel(new Module());
var sr = kernel.Get<ISR>();
}
}
Когда я запускаю этот код, у меня возникает исключение, потому что у меня есть циклическая зависимость.Классу SR необходим экземпляр IFI, который нужно внедрить, чтобы его завершить, а классу FI нужен экземпляр ISR, который нужно внедрить.
Конечно, использование внедрения свойства не решает эту проблему.
У меня есть особенность: мне нужно, чтобы сначала был создан ISR, и именно этот экземпляр должен быть передан FI.Поэтому ISR и IFI должны совместно использовать область действия.
Как бы вы решили это с Ninject?