-
Notifications
You must be signed in to change notification settings - Fork 105
/
Copy pathDebugAdapterProtocolServiceCollectionExtensions.cs
39 lines (35 loc) · 1.77 KB
/
DebugAdapterProtocolServiceCollectionExtensions.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
using System;
using System.Collections.Generic;
using System.Reflection;
using DryIoc;
using OmniSharp.Extensions.DebugAdapter.Protocol;
using OmniSharp.Extensions.JsonRpc;
namespace OmniSharp.Extensions.DebugAdapter.Shared
{
internal static class DebugAdapterProtocolServiceCollectionExtensions
{
internal static IContainer AddDebugAdapterProtocolInternals<T>(this IContainer container, DebugAdapterRpcOptionsBase<T> options) where T : IJsonRpcHandlerRegistry<T>
{
if (options.Serializer == null)
{
throw new ArgumentException("Serializer is missing!", nameof(options));
}
container = container.AddJsonRpcServerCore(options);
container.RegisterInstanceMany(new HandlerTypeDescriptorProvider(options.Assemblies), nonPublicServiceTypes: true);
container.RegisterInstanceMany(options.Serializer);
container.RegisterInstance(options.RequestProcessIdentifier);
container.RegisterMany<DebugAdapterSettingsBag>(nonPublicServiceTypes: true, reuse: Reuse.Singleton);
container.RegisterMany<DapReceiver>(nonPublicServiceTypes: true, reuse: Reuse.Singleton);
container.RegisterMany<DebugAdapterRequestRouter>(Reuse.Singleton);
container.RegisterMany<DebugAdapterHandlerCollection>(nonPublicServiceTypes: true, reuse: Reuse.Singleton);
container.RegisterInitializer<DebugAdapterHandlerCollection>(
(manager, context) => {
var descriptions = context.Resolve<IJsonRpcHandlerCollection>();
descriptions.Populate(context, manager);
}
);
container.RegisterMany<DapResponseRouter>(Reuse.Singleton);
return container;
}
}
}