Option1
Самый простой способ, который я могу придумать, - это разделить процесс разрешения на два шага:
Сначала вы можете разрешить B
по указанному известному значению C
вво время выполнения сохраните его в myB
справочном значении:
B myB = c.Resolve<B>(TypedParameter.From(new C()));
, а затем передайте myB
значение преобразователю A
:
A myA = c.Resolve<A>(TypedParameter.From(myB));
Вы можете найти полноерабочий пример в моем GitHub (с выводом).
Option2
Если вы хотите написать одну строку кода во время разрешения, вам нужно будет изменить регистрA
и B
с:
cb.Register<A>((c, p) =>
{
B myB = c.Resolve<B>(p);
return new A(myB);
});
cb.Register<B>((c, p) => {
C myC = p.Named<C>("myC");
return new B(myC);
});
А затем:
A myA = c.Resolve<A>(new NamedParameter("myC", new C()));
Опять же, вы можете найти полный рабочий пример в моем GitHub (свыход).