public static void Main()
var app = new ApplicationContext("user=blah;password=meh");
var request = new WebRequest();
var requestContext = new RequestContext(app, request);
var controller = requestContext.ListUsersController;
public Connection(string connectionString)
public UserService(Connection c)
class ListUsersController
public ListUsersController(UserService u, WebRequest r)
private Lazy<Connection> _connection;
private Lazy<UserService> _userService;
public ApplicationContext(string connectionString)
_connection = new(() => new Connection(connectionString));
_userService = new(() => new UserService(Connection));
public Connection Connection { get => _connection.Value; }
public UserService UserService { get => _userService.Value; }
private Lazy<ListUsersController> _listUsersController;
public RequestContext(ApplicationContext app, WebRequest request)
_listUsersController = new(() => new ListUsersController(app.UserService, request));
public ListUsersController ListUsersController { get => _listUsersController.Value; }