-
-
Notifications
You must be signed in to change notification settings - Fork 28
/
ServiceResourceBuilder.cs
79 lines (56 loc) · 2.34 KB
/
ServiceResourceBuilder.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
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using System.Collections.Generic;
using System.Diagnostics.CodeAnalysis;
using GenHTTP.Api.Content;
using GenHTTP.Api.Infrastructure;
using GenHTTP.Modules.Conversion;
using GenHTTP.Modules.Conversion.Formatters;
using GenHTTP.Modules.Conversion.Providers;
using GenHTTP.Modules.Reflection;
using GenHTTP.Modules.Reflection.Injectors;
namespace GenHTTP.Modules.Webservices.Provider
{
public sealed class ServiceResourceBuilder : IHandlerBuilder<ServiceResourceBuilder>
{
private object? _Instance;
private IBuilder<SerializationRegistry>? _Serializers;
private IBuilder<InjectionRegistry>? _Injectors;
private IBuilder<FormatterRegistry>? _Formatters;
private readonly List<IConcernBuilder> _Concerns = new();
#region Functionality
public ServiceResourceBuilder Type<[DynamicallyAccessedMembers(DynamicallyAccessedMemberTypes.All)] T>() where T : new() => Instance(new T());
public ServiceResourceBuilder Instance(object instance)
{
_Instance = instance;
return this;
}
public ServiceResourceBuilder Serializers(IBuilder<SerializationRegistry> registry)
{
_Serializers = registry;
return this;
}
public ServiceResourceBuilder Injectors(IBuilder<InjectionRegistry> registry)
{
_Injectors = registry;
return this;
}
public ServiceResourceBuilder Formatters(IBuilder<FormatterRegistry> registry)
{
_Formatters = registry;
return this;
}
public ServiceResourceBuilder Add(IConcernBuilder concern)
{
_Concerns.Add(concern);
return this;
}
public IHandler Build(IHandler parent)
{
var serializers = (_Serializers ?? Serialization.Default()).Build();
var injectors = (_Injectors ?? Injection.Default()).Build();
var formatters = (_Formatters ?? Formatting.Default()).Build();
var instance = _Instance ?? throw new BuilderMissingPropertyException("instance");
return Concerns.Chain(parent, _Concerns, (p) => new ServiceResourceRouter(p, instance, serializers, injectors, formatters));
}
#endregion
}
}