using System;
public class Program
{
public static void Main()
var app = new ApplicationContext();
var foo = app.Foo;
}
class Foo {
public Foo(Bar bar) {}
class Bar {
public Bar(Foo foo) {}
class ApplicationContext
private Lazy<Foo> _foo;
private Lazy<Bar> _bar;
public ApplicationContext()
_foo = new(() => new Foo(Bar));
_bar = new(() => new Bar(Foo));
public Foo Foo { get => _foo.Value; }
public Bar Bar { get => _bar.Value; }