khellang / Scrutor

Assembly scanning and decoration extensions for Microsoft.Extensions.DependencyInjection

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Question: Is it possible to specify the registration order?

blahDL opened this issue · comments

I am using Scrutor to register pipeline behaviours for MediatR which is working perfectly with the following code

builder.Services.Scan(scan => scan.FromAssemblyOf<Program>()
    .AddClasses(cls => cls.AssignableTo(typeof(IPipelineBehavior<,>)))
        .AsImplementedInterfaces()
        .WithScopedLifetime()
);

I have now introduced a pipeline behaviour that I want to be run before the others. Pipeline execution order is set by the order they are registered with the container so now I need to either specify the registration order somehow or register them all manually.

Is there a way that I can specify the registration order (by using something like an attribute on the classes) or do I have to stop using Scrutor for this and register them all manually?

@blahDL, +1

@khellang, it would be very useful to describe exactly what the registration order is when calling a Scan. I couldn't find any information about this anywhere.

How does multiple implementation of interface is registered? E.g. Class1, Class2 and Class3 implements Interface1. How this can be registered with Scrutor? How can I control the registration order?

I'd love to hear what you'd expect the API to look like and how it would work? Would it order all implementations per service type or globally? Would it work with an IComparer<Type>?