/// <summary> /// Create an adapter for a remote (out-of-process) plugin. /// </summary> /// <param name="router"></param> /// <param name="pluginContext"></param> /// <param name="descriptor"></param> /// <returns></returns> public static V8PluginAdapter CreateRemote(IV8PluginRouter router, IPluginContext pluginContext, PluginDescriptor descriptor) { V8PluginAdapter adapter; if (!RemotePluginAdapterCache.TryGetValue(descriptor.PluginId, out adapter)) { lock (RemotePluginAdapterCache) { if (!RemotePluginAdapterCache.TryGetValue(descriptor.PluginId, out adapter)) { var plugin = new RemoteV8Plugin(router, pluginContext, descriptor); adapter = new V8PluginAdapter(plugin); RemotePluginAdapterCache.Add(descriptor.PluginId, adapter); } } } return(adapter); }