Search code examples
c#service-locator

Reduce similar dependency injections definitions?


The following code injects Handler#<MyClass#> into IHandler<MyClass#>. How can I use reflection to reduce the number of lines? Or is there any other way?

public void ConfigureServices(IServiceCollection services)
{
    services.AddRazorPages();
    services.AddServerSideBlazor();
    // ....
    services.AddTransient<IHandler<MyClass1>, AHandler>();
    services.AddTransient<IHandler<MyClass2>, BHandler>();
    services.AddTransient<IHandler<MyClass3>, CHandler>();
    services.AddTransient<IHandler<MyClass4>, DHandler>();
    services.AddTransient<IHandler<MyClass5>, EHandler>();
    services.AddTransient<IHandler<MyClass6>, FHandler>();
    services.AddTransient<IHandler<MyClass7>, GHandler>();
    // .... more
}

Solution

  • If you need reflection way then try Scrutor

    services.Scan(scan => scan.FromEntryAssembly()
         .AddClasses(classes => classes.AssignableTo(typeof(IHandler<>)))
         .AsSelf()
         .WithTransientLifetime());