khellang / Scrutor

Assembly scanning and decoration extensions for Microsoft.Extensions.DependencyInjection
MIT License
3.64k stars 239 forks source link

Question: Is it possible to specify the registration order? #183

Open blahDL opened 2 years ago

blahDL commented 2 years ago

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?

anreton commented 1 year ago

@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?

khellang commented 1 year ago

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>?

nasir-awan commented 1 week ago

Do we have this feature in Scrutor? or still we are waiting for it.

khellang commented 1 week ago

The issue is still open 😁