@@ -217,6 +217,109 @@ public static partial IServiceCollection ProcessServices(this IServiceCollection
217217 Assert . Equal ( expected , results . GeneratedTrees [ 1 ] . ToString ( ) ) ;
218218 }
219219
220+ [ Fact ]
221+ public void AddMultipleCustomHandlerAttributesWithDifferentCustomHandler ( )
222+ {
223+ var source = $$ """
224+ using ServiceScan.SourceGenerator;
225+
226+ namespace GeneratorTests;
227+
228+ public static partial class ServicesExtensions
229+ {
230+ [GenerateServiceRegistrations(AssignableTo = typeof(IFirstService), CustomHandler = nameof(HandleFirstType))]
231+ [GenerateServiceRegistrations(AssignableTo = typeof(ISecondService), CustomHandler = nameof(HandleSecondType))]
232+ public static partial void ProcessServices();
233+
234+ private static void HandleFirstType<T>() => System.Console.WriteLine("First:" + typeof(T).Name);
235+ private static void HandleSecondType<T>() => System.Console.WriteLine("Second:" + typeof(T).Name);
236+ }
237+ """ ;
238+
239+ var services =
240+ """
241+ namespace GeneratorTests;
242+
243+ public interface IFirstService { }
244+ public interface ISecondService { }
245+ public class MyService1 : IFirstService { }
246+ public class MyService2 : ISecondService { }
247+ """ ;
248+
249+ var compilation = CreateCompilation ( source , services ) ;
250+
251+ var results = CSharpGeneratorDriver
252+ . Create ( _generator )
253+ . RunGenerators ( compilation )
254+ . GetRunResult ( ) ;
255+
256+ var expected = $$ """
257+ namespace GeneratorTests;
258+
259+ public static partial class ServicesExtensions
260+ {
261+ public static partial void ProcessServices()
262+ {
263+ HandleFirstType<global::GeneratorTests.MyService1>();
264+ HandleSecondType<global::GeneratorTests.MyService2>();
265+ }
266+ }
267+ """ ;
268+ Assert . Equal ( expected , results . GeneratedTrees [ 1 ] . ToString ( ) ) ;
269+ }
270+
271+
272+ [ Fact ]
273+ public void AddMultipleCustomHandlerAttributesWithSameCustomHandler ( )
274+ {
275+ var source = $$ """
276+ using ServiceScan.SourceGenerator;
277+
278+ namespace GeneratorTests;
279+
280+ public static partial class ServicesExtensions
281+ {
282+ [GenerateServiceRegistrations(AssignableTo = typeof(IFirstService), CustomHandler = nameof(HandleType))]
283+ [GenerateServiceRegistrations(AssignableTo = typeof(ISecondService), CustomHandler = nameof(HandleType))]
284+ public static partial void ProcessServices();
285+
286+ private static void HandleType<T>() => System.Console.WriteLine(typeof(T).Name);
287+ }
288+ """ ;
289+
290+ var services =
291+ """
292+ namespace GeneratorTests;
293+
294+ public interface IFirstService { }
295+ public interface ISecondService { }
296+ public class MyService1 : IFirstService { }
297+ public class MyService2 : ISecondService { }
298+ """ ;
299+
300+ var compilation = CreateCompilation ( source , services ) ;
301+
302+ var results = CSharpGeneratorDriver
303+ . Create ( _generator )
304+ . RunGenerators ( compilation )
305+ . GetRunResult ( ) ;
306+
307+ var expected = $$ """
308+ namespace GeneratorTests;
309+
310+ public static partial class ServicesExtensions
311+ {
312+ public static partial void ProcessServices()
313+ {
314+ HandleType<global::GeneratorTests.MyService1>();
315+ HandleType<global::GeneratorTests.MyService2>();
316+ }
317+ }
318+ """ ;
319+ Assert . Equal ( expected , results . GeneratedTrees [ 1 ] . ToString ( ) ) ;
320+ }
321+
322+
220323 private static Compilation CreateCompilation ( params string [ ] source )
221324 {
222325 var path = Path . GetDirectoryName ( typeof ( object ) . Assembly . Location ) ! ;
0 commit comments