public IVpnConnection GetVpnConnection(IComponentContext c) { ILogger logger = c.Resolve <ILogger>(); OpenVpnConfig config = c.Resolve <OpenVpnConfig>(); ITaskQueue taskQueue = c.Resolve <ITaskQueue>(); TcpPortScanner tcpPortScanner = c.Resolve <TcpPortScanner>(); tcpPortScanner.Config(config.OpenVpnStaticKey); IEndpointScanner endpointScanner = c.Resolve <VpnEndpointScanner>(); VpnEndpointCandidates candidates = new(); return(new LoggingWrapper( logger, new ReconnectingWrapper( logger, candidates, endpointScanner, new HandlingRequestsWrapper( logger, taskQueue, new BestPortWrapper( logger, taskQueue, endpointScanner, new QueueingEventsWrapper( taskQueue, new VpnProtocolWrapper(GetOpenVpnConnection(c), GetWireguardConnection(c)))))))); }