На вики-странице autofac о Циркулярные ссылки сказано использовать:
cb.Register<DependsByProp>().OnActivated(ActivatedHandler.InjectUnsetProperties);
Но похоже, что ActivatedHandler больше не существует в 2.4.5. Покопавшись в источнике, я нашел реализацию этого класса, и поэтому вместо этого я включил реализацию метода в OnActivation. К сожалению, это все еще не работает.
Я собрал здесь минимальное повторение, похожее на то, что было на вики-странице.
class M
{
public VM VM { get; set; }
public M()
{
}
}
class VM
{
public VM(M m)
{
}
}
[Fact]
void CanResolveCircular()
{
ContainerBuilder builder = new ContainerBuilder();
builder.RegisterType<VM>();
builder.RegisterType<M>().OnActivated(e => e.Context.InjectUnsetProperties(e.Instance));
using (var container = builder.Build())
{
var m = container.Resolve<M>();
Assert.NotNull(m);
}
}
Этот код все еще выдает исключение переполнения стека при попытке Resolve. Что мне не хватает? Как правильно использовать Autofac для обработки циклических зависимостей?