1111
1212namespace Smdn . Net . MuninNode . DependencyInjection ;
1313
14+ [ Obsolete ( $ "Use { nameof ( MuninNodeBuilderExtensions ) } instead.") ]
1415public static class IMuninNodeBuilderExtensions {
16+ private static MuninNodeBuilder ThrowIfBuilderTypeIsNotSupported ( IMuninNodeBuilder builder )
17+ {
18+ if ( builder is not MuninNodeBuilder muninNodeBuilder )
19+ throw new NotSupportedException ( $ "The builder implementation of type `{ builder . GetType ( ) . FullName } ` does not support service key configuration.") ;
20+
21+ return muninNodeBuilder ;
22+ }
23+
1524#pragma warning disable CS0419
1625 /// <remarks>
1726 /// If <see cref="UsePluginProvider"/> is called, the configurations made by this method will be overridden.
@@ -21,17 +30,10 @@ public static IMuninNodeBuilder AddPlugin(
2130 IPlugin plugin
2231 )
2332#pragma warning restore CS0419
24- {
25- if ( builder is null )
26- throw new ArgumentNullException ( nameof ( builder ) ) ;
27- if ( plugin is null )
28- throw new ArgumentNullException ( nameof ( plugin ) ) ;
29-
30- return AddPlugin (
31- builder : builder ,
32- buildPlugin : _ => plugin
33+ => MuninNodeBuilderExtensions . AddPlugin (
34+ builder : ThrowIfBuilderTypeIsNotSupported ( builder ?? throw new ArgumentNullException ( nameof ( builder ) ) ) ,
35+ plugin : plugin ?? throw new ArgumentNullException ( nameof ( plugin ) )
3336 ) ;
34- }
3537
3638#pragma warning disable CS0419
3739 /// <remarks>
@@ -42,19 +44,10 @@ public static IMuninNodeBuilder AddPlugin(
4244 Func < IServiceProvider , IPlugin > buildPlugin
4345 )
4446#pragma warning restore CS0419
45- {
46- if ( builder is null )
47- throw new ArgumentNullException ( nameof ( builder ) ) ;
48- if ( buildPlugin is null )
49- throw new ArgumentNullException ( nameof ( buildPlugin ) ) ;
50-
51- if ( builder is not MuninNodeBuilder muninNodeBuilder )
52- throw new NotSupportedException ( $ "The builder implementation of type `{ builder . GetType ( ) . FullName } ` does not support service key configuration.") ;
53-
54- muninNodeBuilder . AddPluginFactory ( buildPlugin ) ;
55-
56- return builder ;
57- }
47+ => MuninNodeBuilderExtensions . AddPlugin (
48+ builder : ThrowIfBuilderTypeIsNotSupported ( builder ?? throw new ArgumentNullException ( nameof ( builder ) ) ) ,
49+ buildPlugin : buildPlugin ?? throw new ArgumentNullException ( nameof ( buildPlugin ) )
50+ ) ;
5851
5952#pragma warning disable CS0419
6053 /// <remarks>
@@ -66,17 +59,10 @@ public static IMuninNodeBuilder UsePluginProvider(
6659 IPluginProvider pluginProvider
6760 )
6861#pragma warning restore CS0419
69- {
70- if ( builder is null )
71- throw new ArgumentNullException ( nameof ( builder ) ) ;
72- if ( pluginProvider is null )
73- throw new ArgumentNullException ( nameof ( pluginProvider ) ) ;
74-
75- return UsePluginProvider (
76- builder : builder ,
77- buildPluginProvider : _ => pluginProvider
62+ => MuninNodeBuilderExtensions . UsePluginProvider (
63+ builder : ThrowIfBuilderTypeIsNotSupported ( builder ?? throw new ArgumentNullException ( nameof ( builder ) ) ) ,
64+ pluginProvider : pluginProvider ?? throw new ArgumentNullException ( nameof ( pluginProvider ) )
7865 ) ;
79- }
8066
8167#pragma warning disable CS0419
8268 /// <remarks>
@@ -88,19 +74,10 @@ public static IMuninNodeBuilder UsePluginProvider(
8874 Func < IServiceProvider , IPluginProvider > buildPluginProvider
8975 )
9076#pragma warning restore CS0419
91- {
92- if ( builder is null )
93- throw new ArgumentNullException ( nameof ( builder ) ) ;
94- if ( buildPluginProvider is null )
95- throw new ArgumentNullException ( nameof ( buildPluginProvider ) ) ;
96-
97- if ( builder is not MuninNodeBuilder muninNodeBuilder )
98- throw new NotSupportedException ( $ "The builder implementation of type `{ builder . GetType ( ) . FullName } ` does not support service key configuration.") ;
99-
100- muninNodeBuilder . SetPluginProviderFactory ( buildPluginProvider ) ;
101-
102- return builder ;
103- }
77+ => MuninNodeBuilderExtensions . UsePluginProvider (
78+ builder : ThrowIfBuilderTypeIsNotSupported ( builder ?? throw new ArgumentNullException ( nameof ( builder ) ) ) ,
79+ buildPluginProvider : buildPluginProvider ?? throw new ArgumentNullException ( nameof ( buildPluginProvider ) )
80+ ) ;
10481
10582#pragma warning disable CS0419
10683 /// <remarks>
@@ -111,17 +88,10 @@ public static IMuninNodeBuilder UseSessionCallback(
11188 INodeSessionCallback sessionCallback
11289 )
11390#pragma warning restore CS0419
114- {
115- if ( builder is null )
116- throw new ArgumentNullException ( nameof ( builder ) ) ;
117- if ( sessionCallback is null )
118- throw new ArgumentNullException ( nameof ( sessionCallback ) ) ;
119-
120- return UseSessionCallback (
121- builder : builder ,
122- buildSessionCallback : _ => sessionCallback
91+ => MuninNodeBuilderExtensions . UseSessionCallback (
92+ builder : ThrowIfBuilderTypeIsNotSupported ( builder ?? throw new ArgumentNullException ( nameof ( builder ) ) ) ,
93+ sessionCallback : sessionCallback ?? throw new ArgumentNullException ( nameof ( sessionCallback ) )
12394 ) ;
124- }
12595
12696#pragma warning disable CS0419
12797 /// <remarks>
@@ -133,29 +103,12 @@ public static IMuninNodeBuilder UseSessionCallback(
133103 Func < string , CancellationToken , ValueTask > ? reportSessionClosedAsyncFunc
134104 )
135105#pragma warning restore CS0419
136- => UseSessionCallback (
137- builder : builder ,
138- buildSessionCallback : _ => new SessionCallbackFuncWrapper (
139- reportSessionStartedAsyncFunc ,
140- reportSessionClosedAsyncFunc
141- )
106+ => MuninNodeBuilderExtensions . UseSessionCallback (
107+ builder : ThrowIfBuilderTypeIsNotSupported ( builder ?? throw new ArgumentNullException ( nameof ( builder ) ) ) ,
108+ reportSessionStartedAsyncFunc : reportSessionStartedAsyncFunc ,
109+ reportSessionClosedAsyncFunc : reportSessionClosedAsyncFunc
142110 ) ;
143111
144- private sealed class SessionCallbackFuncWrapper (
145- Func < string , CancellationToken , ValueTask > ? reportSessionStartedAsyncFunc ,
146- Func < string , CancellationToken , ValueTask > ? reportSessionClosedAsyncFunc
147- ) : INodeSessionCallback {
148- public ValueTask ReportSessionStartedAsync ( string sessionId , CancellationToken cancellationToken )
149- => reportSessionStartedAsyncFunc is null
150- ? default
151- : reportSessionStartedAsyncFunc ( sessionId , cancellationToken ) ;
152-
153- public ValueTask ReportSessionClosedAsync ( string sessionId , CancellationToken cancellationToken )
154- => reportSessionClosedAsyncFunc is null
155- ? default
156- : reportSessionClosedAsyncFunc ( sessionId , cancellationToken ) ;
157- }
158-
159112#pragma warning disable CS0419
160113 /// <remarks>
161114 /// If <see cref="UsePluginProvider"/> is called, the configurations made by this method will be overridden.
@@ -165,96 +118,35 @@ public static IMuninNodeBuilder UseSessionCallback(
165118 Func < IServiceProvider , INodeSessionCallback > buildSessionCallback
166119 )
167120#pragma warning restore CS0419
168- {
169- if ( builder is null )
170- throw new ArgumentNullException ( nameof ( builder ) ) ;
171- if ( buildSessionCallback is null )
172- throw new ArgumentNullException ( nameof ( buildSessionCallback ) ) ;
173-
174- if ( builder is not MuninNodeBuilder muninNodeBuilder )
175- throw new NotSupportedException ( $ "The builder implementation of type `{ builder . GetType ( ) . FullName } ` does not support service key configuration.") ;
176-
177- muninNodeBuilder . SetSessionCallbackFactory ( buildSessionCallback ) ;
178-
179- return builder ;
180- }
121+ => MuninNodeBuilderExtensions . UseSessionCallback (
122+ builder : ThrowIfBuilderTypeIsNotSupported ( builder ?? throw new ArgumentNullException ( nameof ( builder ) ) ) ,
123+ buildSessionCallback : buildSessionCallback ?? throw new ArgumentNullException ( nameof ( buildSessionCallback ) )
124+ ) ;
181125
182126 public static IMuninNodeBuilder UseListenerFactory (
183127 this IMuninNodeBuilder builder ,
184128 IMuninNodeListenerFactory listenerFactory
185129 )
186- {
187- if ( builder is null )
188- throw new ArgumentNullException ( nameof ( builder ) ) ;
189- if ( listenerFactory is null )
190- throw new ArgumentNullException ( nameof ( listenerFactory ) ) ;
191-
192- return UseListenerFactory (
193- builder : builder ,
194- buildListenerFactory : _ => listenerFactory
130+ => MuninNodeBuilderExtensions . UseListenerFactory (
131+ builder : ThrowIfBuilderTypeIsNotSupported ( builder ?? throw new ArgumentNullException ( nameof ( builder ) ) ) ,
132+ listenerFactory : listenerFactory ?? throw new ArgumentNullException ( nameof ( listenerFactory ) )
195133 ) ;
196- }
197134
198135 public static IMuninNodeBuilder UseListenerFactory (
199136 this IMuninNodeBuilder builder ,
200137 Func < IServiceProvider , EndPoint , IMuninNode , CancellationToken , ValueTask < IMuninNodeListener > > createListenerAsyncFunc
201138 )
202- {
203- if ( builder is null )
204- throw new ArgumentNullException ( nameof ( builder ) ) ;
205- if ( createListenerAsyncFunc is null )
206- throw new ArgumentNullException ( nameof ( createListenerAsyncFunc ) ) ;
207-
208- return UseListenerFactory (
209- builder : builder ,
210- buildListenerFactory : serviceProvider => new CreateListenerAsyncFuncWrapper (
211- serviceProvider ,
212- createListenerAsyncFunc
213- )
139+ => MuninNodeBuilderExtensions . UseListenerFactory (
140+ builder : ThrowIfBuilderTypeIsNotSupported ( builder ?? throw new ArgumentNullException ( nameof ( builder ) ) ) ,
141+ createListenerAsyncFunc : createListenerAsyncFunc ?? throw new ArgumentNullException ( nameof ( createListenerAsyncFunc ) )
214142 ) ;
215- }
216-
217- private sealed class CreateListenerAsyncFuncWrapper (
218- IServiceProvider serviceProvider ,
219- Func < IServiceProvider , EndPoint , IMuninNode , CancellationToken , ValueTask < IMuninNodeListener > > createListenerAsyncFunc
220- ) : IMuninNodeListenerFactory {
221- public ValueTask < IMuninNodeListener > CreateAsync ( EndPoint endPoint , IMuninNode node , CancellationToken cancellationToken )
222- => createListenerAsyncFunc ( serviceProvider , endPoint , node , cancellationToken ) ;
223- }
224143
225144 public static IMuninNodeBuilder UseListenerFactory (
226145 this IMuninNodeBuilder builder ,
227146 Func < IServiceProvider , IMuninNodeListenerFactory > buildListenerFactory
228147 )
229- {
230- if ( builder is null )
231- throw new ArgumentNullException ( nameof ( builder ) ) ;
232- if ( buildListenerFactory is null )
233- throw new ArgumentNullException ( nameof ( buildListenerFactory ) ) ;
234-
235- if ( builder is not MuninNodeBuilder muninNodeBuilder )
236- throw new NotSupportedException ( $ "The builder implementation of type `{ builder . GetType ( ) . FullName } ` does not support service key configuration.") ;
237-
238- muninNodeBuilder . SetListenerFactory ( buildListenerFactory ) ;
239-
240- return builder ;
241- }
242-
243- internal static TMuninNode Build < TMuninNode > (
244- this IMuninNodeBuilder builder ,
245- IServiceProvider serviceProvider
246- ) where TMuninNode : IMuninNode
247- {
248- if ( builder is null )
249- throw new ArgumentNullException ( nameof ( builder ) ) ;
250- if ( serviceProvider is null )
251- throw new ArgumentNullException ( nameof ( serviceProvider ) ) ;
252-
253- var n = builder . Build ( serviceProvider ) ;
254-
255- if ( n is not TMuninNode node )
256- throw new InvalidOperationException ( $ "The type '{ n . GetType ( ) } ' of the constructed instance did not match the requested type '{ typeof ( TMuninNode ) } '.") ;
257-
258- return node ;
259- }
148+ => MuninNodeBuilderExtensions . UseListenerFactory (
149+ builder : ThrowIfBuilderTypeIsNotSupported ( builder ?? throw new ArgumentNullException ( nameof ( builder ) ) ) ,
150+ buildListenerFactory : buildListenerFactory ?? throw new ArgumentNullException ( nameof ( buildListenerFactory ) )
151+ ) ;
260152}
0 commit comments