@@ -264,4 +264,73 @@ await RunGenerator(
264264 EXPECTED_REGISTRATION ,
265265 ( "AutoRegisterInject.IFoo.g.cs" , EXPECTED_INTERFACE ) ) ;
266266 }
267+
268+ [ Fact ]
269+ public async Task ShouldRegisterOtherImplementorsOfAutoInterface ( )
270+ {
271+ const string INPUT = @"[AutoInterface]
272+ [RegisterKeyedScoped(""base"")]
273+ public class Test : ITest
274+ {
275+ public string Text() => ""Hello World!"";
276+ }
277+
278+ [RegisterScoped]
279+ public class CachedTest : ITest
280+ {
281+ public string Text() => ""Cached Hello World!"";
282+ }" ;
283+
284+ const string EXPECTED_REGISTRATION = @"// <auto-generated>
285+ // Automatically generated by AutoRegisterInject.
286+ // Changes made to this file may be lost and may cause undesirable behaviour.
287+ // </auto-generated>
288+ using Microsoft.Extensions.DependencyInjection;
289+ using Microsoft.Extensions.DependencyInjection.Extensions;
290+
291+ /// <summary>
292+ /// AutoRegisterInject service collection extensions
293+ /// </summary>
294+ public static class AutoRegisterInjectServiceCollectionExtension
295+ {
296+ /// <summary>
297+ /// Adds all types registered with AutoRegisterInject attributes to the given
298+ /// service collection from the named assembly
299+ /// </summary>
300+ /// <param name=""serviceCollection"">Service collection to register types with</param>
301+ /// <returns>Service collection with registered types</returns>
302+ public static Microsoft.Extensions.DependencyInjection.IServiceCollection AutoRegisterFromTestProject(this Microsoft.Extensions.DependencyInjection.IServiceCollection serviceCollection)
303+ {
304+ return AutoRegister(serviceCollection);
305+ }
306+
307+ /// <summary>
308+ /// Adds all types registered with AutoRegisterInject attributes to the given
309+ /// service collection
310+ /// </summary>
311+ /// <param name=""serviceCollection"">Service collection to register types with</param>
312+ /// <returns>Service collection with registered types</returns>
313+ internal static Microsoft.Extensions.DependencyInjection.IServiceCollection AutoRegister(this Microsoft.Extensions.DependencyInjection.IServiceCollection serviceCollection)
314+ {
315+ serviceCollection.AddKeyedScoped<ITest, Test>(""base"");
316+ serviceCollection.AddScoped<ITest, CachedTest>();
317+ return serviceCollection;
318+ }
319+ }" ;
320+
321+ const string EXPECTED_INTERFACE = @"// <auto-generated>
322+ // Automatically generated by AutoRegisterInject.
323+ // Changes made to this file may be lost and may cause undesirable behaviour.
324+ // </auto-generated>
325+ #nullable enable
326+ public interface ITest
327+ {
328+ string Text();
329+ }" ;
330+
331+ await RunGenerator (
332+ INPUT ,
333+ EXPECTED_REGISTRATION ,
334+ ( "AutoRegisterInject.ITest.g.cs" , EXPECTED_INTERFACE ) ) ;
335+ }
267336}
0 commit comments