@@ -39,6 +39,8 @@ public static IMuninNodeBuilder AddNode(
3939 Action < MuninNodeOptions > configure
4040 )
4141 => AddNode <
42+ IMuninNode ,
43+ IMuninNode ,
4244 MuninNodeOptions ,
4345 MuninNodeBuilder
4446 > (
@@ -67,21 +69,132 @@ Action<MuninNodeOptions> configure
6769 /// An <see cref="Func{TMuninNodeBuilder}"/> to create <typeparamref name="TMuninNodeBuilder"/> to build
6870 /// the <c>Munin-Node</c>.
6971 /// </param>
72+ /// <returns>The current <typeparamref name="TMuninNodeBuilder"/> so that additional calls can be chained.</returns>
73+ /// <exception cref="ArgumentNullException">
74+ /// <paramref name="builder"/> is <see langword="null"/>, or
75+ /// <paramref name="configure"/> is <see langword="null"/>, or
76+ /// <paramref name="createBuilder"/> is <see langword="null"/>.
77+ /// </exception>
78+ public static
79+ TMuninNodeBuilder AddNode <
80+ TMuninNodeOptions ,
81+ TMuninNodeBuilder
82+ > (
83+ this IMuninServiceBuilder builder ,
84+ Action < TMuninNodeOptions > configure ,
85+ Func < IMuninServiceBuilder , string , TMuninNodeBuilder > createBuilder
86+ )
87+ where TMuninNodeOptions : MuninNodeOptions , new ( )
88+ where TMuninNodeBuilder : MuninNodeBuilder
89+ => AddNode <
90+ IMuninNode ,
91+ IMuninNode ,
92+ TMuninNodeOptions ,
93+ TMuninNodeBuilder
94+ > (
95+ builder : builder ?? throw new ArgumentNullException ( nameof ( builder ) ) ,
96+ configure : configure ?? throw new ArgumentNullException ( nameof ( configure ) ) ,
97+ createBuilder : createBuilder ?? throw new ArgumentNullException ( nameof ( createBuilder ) )
98+ ) ;
99+
100+ /// <summary>
101+ /// Adds a <typeparamref name="TMuninNode"/> to the <see cref="IMuninServiceBuilder"/> with specified configurations.
102+ /// </summary>
103+ /// <typeparam name="TMuninNode">
104+ /// The type of <see cref="IMuninNode"/> service to add to the <seealso cref="IServiceCollection"/>.
105+ /// </typeparam>
106+ /// <typeparam name="TMuninNodeOptions">
107+ /// The extended type of <see cref="MuninNodeOptions"/> to configure the <typeparamref name="TMuninNode"/>.
108+ /// </typeparam>
109+ /// <typeparam name="TMuninNodeBuilder">
110+ /// The extended type of <see cref="MuninNodeBuilder"/> to build the <typeparamref name="TMuninNode"/>.
111+ /// </typeparam>
112+ /// <param name="builder">
113+ /// An <see cref="IMuninServiceBuilder"/> that the built <typeparamref name="TMuninNode"/> will be added to.
114+ /// </param>
115+ /// <param name="configure">
116+ /// An <see cref="Action{TMuninNodeOptions}"/> to setup <typeparamref name="TMuninNodeOptions"/> to
117+ /// configure the <typeparamref name="TMuninNode"/> to be built.
118+ /// </param>
119+ /// <param name="createBuilder">
120+ /// An <see cref="Func{TMuninNodeBuilder}"/> to create <typeparamref name="TMuninNodeBuilder"/> to build
121+ /// the <typeparamref name="TMuninNode"/>.
122+ /// </param>
123+ /// <returns>The current <typeparamref name="TMuninNodeBuilder"/> so that additional calls can be chained.</returns>
124+ /// <exception cref="ArgumentNullException">
125+ /// <paramref name="builder"/> is <see langword="null"/>, or
126+ /// <paramref name="configure"/> is <see langword="null"/>, or
127+ /// <paramref name="createBuilder"/> is <see langword="null"/>.
128+ /// </exception>
129+ public static
130+ TMuninNodeBuilder AddNode <
131+ TMuninNode ,
132+ TMuninNodeOptions ,
133+ TMuninNodeBuilder
134+ > (
135+ this IMuninServiceBuilder builder ,
136+ Action < TMuninNodeOptions > configure ,
137+ Func < IMuninServiceBuilder , string , TMuninNodeBuilder > createBuilder
138+ )
139+ where TMuninNode : class , IMuninNode
140+ where TMuninNodeOptions : MuninNodeOptions , new ( )
141+ where TMuninNodeBuilder : MuninNodeBuilder
142+ => AddNode <
143+ TMuninNode ,
144+ TMuninNode ,
145+ TMuninNodeOptions ,
146+ TMuninNodeBuilder
147+ > (
148+ builder : builder ?? throw new ArgumentNullException ( nameof ( builder ) ) ,
149+ configure : configure ?? throw new ArgumentNullException ( nameof ( configure ) ) ,
150+ createBuilder : createBuilder ?? throw new ArgumentNullException ( nameof ( createBuilder ) )
151+ ) ;
152+
153+ /// <summary>
154+ /// Adds a <typeparamref name="TMuninNodeImplementation"/> to the <see cref="IMuninServiceBuilder"/> with specified configurations.
155+ /// </summary>
156+ /// <typeparam name="TMuninNodeService">
157+ /// The type of <see cref="IMuninNode"/> service to add to the <seealso cref="IServiceCollection"/>.
158+ /// </typeparam>
159+ /// <typeparam name="TMuninNodeImplementation">
160+ /// The type of <typeparamref name="TMuninNodeService"/> implementation.
161+ /// </typeparam>
162+ /// <typeparam name="TMuninNodeOptions">
163+ /// The extended type of <see cref="MuninNodeOptions"/> to configure the <typeparamref name="TMuninNodeImplementation"/>.
164+ /// </typeparam>
165+ /// <typeparam name="TMuninNodeBuilder">
166+ /// The extended type of <see cref="MuninNodeBuilder"/> to build the <typeparamref name="TMuninNodeImplementation"/>.
167+ /// </typeparam>
168+ /// <param name="builder">
169+ /// An <see cref="IMuninServiceBuilder"/> that the built <typeparamref name="TMuninNodeImplementation"/> will be added to.
170+ /// </param>
171+ /// <param name="configure">
172+ /// An <see cref="Action{TMuninNodeOptions}"/> to setup <typeparamref name="TMuninNodeOptions"/> to
173+ /// configure the <typeparamref name="TMuninNodeImplementation"/> to be built.
174+ /// </param>
175+ /// <param name="createBuilder">
176+ /// An <see cref="Func{TMuninNodeBuilder}"/> to create <typeparamref name="TMuninNodeBuilder"/> to build
177+ /// the <typeparamref name="TMuninNodeImplementation"/>.
178+ /// </param>
70179 /// <returns>The current <see cref="IMuninNodeBuilder"/> so that additional calls can be chained.</returns>
71180 /// <exception cref="ArgumentNullException">
72181 /// <paramref name="builder"/> is <see langword="null"/>, or
73182 /// <paramref name="configure"/> is <see langword="null"/>, or
74183 /// <paramref name="createBuilder"/> is <see langword="null"/>.
75184 /// </exception>
76185 public static
77- IMuninNodeBuilder AddNode <
186+ TMuninNodeBuilder AddNode <
187+ TMuninNodeService ,
188+ TMuninNodeImplementation ,
78189 TMuninNodeOptions ,
79190 TMuninNodeBuilder
80191 > (
81192 this IMuninServiceBuilder builder ,
82193 Action < TMuninNodeOptions > configure ,
83194 Func < IMuninServiceBuilder , string , TMuninNodeBuilder > createBuilder
84195 )
196+ where TMuninNodeService : class , IMuninNode
197+ where TMuninNodeImplementation : class , TMuninNodeService
85198 where TMuninNodeOptions : MuninNodeOptions , new ( )
86199 where TMuninNodeBuilder : MuninNodeBuilder
87200 {
@@ -107,27 +220,31 @@ Func<IMuninServiceBuilder, string, TMuninNodeBuilder> createBuilder
107220 ) ;
108221
109222 builder . Services . Add (
110- ServiceDescriptor . KeyedSingleton < IMuninNodeBuilder > (
223+ ServiceDescriptor . KeyedSingleton < TMuninNodeBuilder > (
111224 serviceKey : nodeBuilder . ServiceKey ,
112225 implementationFactory : ( _ , _ ) => nodeBuilder
113226 )
114227 ) ;
115228
116229 // add keyed/singleton IMuninNode
117230 builder . Services . Add (
118- ServiceDescriptor . KeyedSingleton < IMuninNode > (
231+ ServiceDescriptor . KeyedSingleton < TMuninNodeService , TMuninNodeImplementation > (
119232 serviceKey : nodeBuilder . ServiceKey ,
120233 static ( serviceProvider , serviceKey )
121- => serviceProvider . GetRequiredKeyedService < IMuninNodeBuilder > ( serviceKey ) . Build ( serviceProvider )
234+ => serviceProvider
235+ . GetRequiredKeyedService < TMuninNodeBuilder > ( serviceKey )
236+ . Build < TMuninNodeImplementation > ( serviceProvider )
122237 )
123238 ) ;
124239
125240 // add keyless/multiple IMuninNode
241+ #pragma warning disable IDE0200
126242 builder . Services . Add (
127- ServiceDescriptor . Transient < IMuninNode > (
128- nodeBuilder . Build
243+ ServiceDescriptor . Transient < TMuninNodeService , TMuninNodeImplementation > (
244+ serviceProvider => nodeBuilder . Build < TMuninNodeImplementation > ( serviceProvider )
129245 )
130246 ) ;
247+ #pragma warning restore IDE0200
131248
132249 return nodeBuilder ;
133250 }
0 commit comments