示例#1
0
        public static Task <DebugAdapterServer> From(Action <DebugAdapterServerOptions> optionsAction, IServiceProvider?outerServiceProvider, CancellationToken cancellationToken)
        {
            var options = new DebugAdapterServerOptions();

            optionsAction(options);
            return(From(options, outerServiceProvider, cancellationToken));
        }
示例#2
0
        public static DebugAdapterServer Create(Action <DebugAdapterServerOptions> optionsAction, IServiceProvider?outerServiceProvider)
        {
            var options = new DebugAdapterServerOptions();

            optionsAction(options);
            return(Create(options, outerServiceProvider));
        }
示例#3
0
        public static async Task <DebugAdapterServer> From(DebugAdapterServerOptions options, IServiceProvider?outerServiceProvider, CancellationToken cancellationToken)
        {
            var server = Create(options, outerServiceProvider);
            await server.Initialize(cancellationToken).ConfigureAwait(false);

            return(server);
        }
示例#4
0
 public static DebugAdapterServer Create(DebugAdapterServerOptions options) => Create(options, null);
示例#5
0
 internal static IContainer CreateContainer(DebugAdapterServerOptions options, IServiceProvider?outerServiceProvider) =>
 JsonRpcServerContainer.Create(outerServiceProvider)
 .AddDebugAdapterServerInternals(options, outerServiceProvider);
示例#6
0
        internal static IContainer AddDebugAdapterServerInternals(this IContainer container, DebugAdapterServerOptions options, IServiceProvider outerServiceProvider)
        {
            container = container.AddDebugAdapterProtocolInternals(options);

            if (options.OnUnhandledException != null)
            {
                container.RegisterInstance(options.OnUnhandledException);
            }
            else
            {
                container.RegisterDelegate(_ => new OnUnhandledExceptionHandler(e => { }), Reuse.Singleton);
            }

            container.RegisterInstance <IOptionsFactory <DebugAdapterServerOptions> >(new ValueOptionsFactory <DebugAdapterServerOptions>(options));

            container.RegisterInstance(options.Capabilities);
            container.RegisterInstance(options.RequestProcessIdentifier);

            container.RegisterMany <DebugAdapterServerProgressManager>(nonPublicServiceTypes: true, reuse: Reuse.Singleton);
            container.RegisterMany <DebugAdapterServer>(
                serviceTypeCondition: type => type == typeof(IDebugAdapterServer) || type == typeof(DebugAdapterServer), reuse: Reuse.Singleton
                );

            // container.
            var providedConfiguration = options.Services.FirstOrDefault(z => z.ServiceType == typeof(IConfiguration) && z.ImplementationInstance is IConfiguration);

            container.RegisterDelegate <IConfiguration>(
                _ => {
                var builder = new ConfigurationBuilder();
                if (outerServiceProvider != null)
                {
                    var outerConfiguration = outerServiceProvider.GetService <IConfiguration>();
                    if (outerConfiguration != null)
                    {
                        builder.AddConfiguration(outerConfiguration, false);
                    }
                }

                if (providedConfiguration != null)
                {
                    builder.AddConfiguration(providedConfiguration.ImplementationInstance as IConfiguration);
                }

                return(builder.Build());
            },
                Reuse.Singleton
                );

            return(container);
        }
示例#7
0
 /// <summary>
 /// Sets the default scheduler to be used when scheduling other tasks
 /// </summary>
 /// <param name="options"></param>
 /// <param name="defaultScheduler"></param>
 /// <returns></returns>
 public static DebugAdapterServerOptions WithDefaultScheduler(this DebugAdapterServerOptions options, IScheduler defaultScheduler)
 {
     options.DefaultScheduler = defaultScheduler;
     return(options);
 }
示例#8
0
 public static Task <DebugAdapterServer> From(DebugAdapterServerOptions options, CancellationToken cancellationToken) => From(options, null, cancellationToken);
示例#9
0
 public static DebugAdapterServerOptions ConfigureLogging(this DebugAdapterServerOptions options, Action <ILoggingBuilder> builderAction)
 {
     options.LoggingBuilderAction = builderAction;
     return(options);
 }
示例#10
0
 public static DebugAdapterServerOptions OnStarted(this DebugAdapterServerOptions options, OnDebugAdapterServerStartedDelegate @delegate)
 {
     options.Services.AddSingleton(@delegate);
     return(options);
 }
示例#11
0
 public static DebugAdapterServerOptions OnInitialized(this DebugAdapterServerOptions options, OnDebugAdapterServerInitializedDelegate initializedDelegate)
 {
     options.Services.AddSingleton(initializedDelegate);
     return(options);
 }
示例#12
0
 public static DebugAdapterServerOptions WithRequestProcessIdentifier(this DebugAdapterServerOptions options, IRequestProcessIdentifier requestProcessIdentifier)
 {
     options.RequestProcessIdentifier = requestProcessIdentifier;
     return(options);
 }
示例#13
0
 public static DebugAdapterServerOptions WithSerializer(this DebugAdapterServerOptions options, ISerializer serializer)
 {
     options.Serializer = serializer;
     return(options);
 }
示例#14
0
 /// <summary>
 /// Sets the scheduler use during writing output
 /// </summary>
 /// <param name="options"></param>
 /// <param name="outputScheduler"></param>
 /// <returns></returns>
 public static DebugAdapterServerOptions WithOutputScheduler(this DebugAdapterServerOptions options, IScheduler outputScheduler)
 {
     options.OutputScheduler = outputScheduler;
     return(options);
 }
示例#15
0
 public static DebugAdapterServer Create(DebugAdapterServerOptions options, IServiceProvider?outerServiceProvider) =>
 CreateContainer(options, outerServiceProvider).Resolve <DebugAdapterServer>();
示例#16
0
 public static Task <DebugAdapterServer> From(DebugAdapterServerOptions options) => From(options, null, CancellationToken.None);
示例#17
0
 public static DebugAdapterServerOptions AddDefaultLoggingProvider(this DebugAdapterServerOptions options)
 {
     options.AddDefaultLoggingProvider = true;
     return(options);
 }
示例#18
0
 public static Task <DebugAdapterServer> From(DebugAdapterServerOptions options, IServiceProvider?outerServiceProvider) =>
 From(options, outerServiceProvider, CancellationToken.None);
示例#19
0
 public static DebugAdapterServerOptions ConfigureConfiguration(this DebugAdapterServerOptions options, Action <IConfigurationBuilder> builderAction)
 {
     options.ConfigurationBuilderAction = builderAction;
     return(options);
 }
示例#20
0
        internal static IContainer AddDebugAdapterServerInternals(this IContainer container, DebugAdapterServerOptions options, IServiceProvider?outerServiceProvider)
        {
            container = container.AddDebugAdapterProtocolInternals(options);

            if (options.OnUnhandledException != null)
            {
                container.RegisterInstance(options.OnUnhandledException);
            }
            else
            {
                container.RegisterDelegate(_ => new OnUnhandledExceptionHandler(_ => { }), Reuse.Singleton);
            }

            container.RegisterInstance <IOptionsFactory <DebugAdapterServerOptions> >(new ValueOptionsFactory <DebugAdapterServerOptions>(options));

            container.RegisterInstance(options.Capabilities);
            container.RegisterInstance(options.RequestProcessIdentifier);

            container.RegisterMany <DebugAdapterServerProgressManager>(nonPublicServiceTypes: true, reuse: Reuse.Singleton);
            container.RegisterMany <DebugAdapterServer>(
                serviceTypeCondition: type => type == typeof(IDebugAdapterServer) || type == typeof(DebugAdapterServer),
                reuse: Reuse.Singleton,
                setup: Setup.With(condition: req => req.IsResolutionRoot || req.Container.Resolve <IInsanceHasStarted>().Started)
                );
            container.RegisterMany <DefaultDebugAdapterServerFacade>(
                serviceTypeCondition: type => type.IsClass || !type.Name.Contains("Proxy") && typeof(DefaultDebugAdapterServerFacade).GetInterfaces().Except(typeof(DefaultDebugAdapterServerFacade).BaseType !.GetInterfaces()).Any(z => type == z),
                reuse: Reuse.Singleton
                );

            // container.
            var providedConfiguration = options.Services.FirstOrDefault(z => z.ServiceType == typeof(IConfiguration) && z.ImplementationInstance is IConfiguration);

            container.RegisterDelegate <IConfiguration>(
                _ => {
                var builder = new ConfigurationBuilder();
                if (outerServiceProvider != null)
                {
                    var outerConfiguration = outerServiceProvider.GetService <IConfiguration>();
                    if (outerConfiguration != null)
                    {
                        builder.CustomAddConfiguration(outerConfiguration, false);
                    }
                }

                if (providedConfiguration != null)
                {
                    builder.CustomAddConfiguration((providedConfiguration.ImplementationInstance as IConfiguration) !);
                }

                return(builder.Build());
            },
                Reuse.Singleton
                );

            return(container);
        }
示例#21
0
 /// <summary>
 /// Sets the scheduler used during reading input
 /// </summary>
 /// <param name="options"></param>
 /// <param name="inputScheduler"></param>
 /// <returns></returns>
 public static DebugAdapterServerOptions WithInputScheduler(this DebugAdapterServerOptions options, IScheduler inputScheduler)
 {
     options.InputScheduler = inputScheduler;
     return(options);
 }