Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update to .NET 8 and leverage keyed services for decoration #209

Open
wants to merge 21 commits into
base: master
Choose a base branch
from

Conversation

khellang
Copy link
Owner

@khellang khellang commented Aug 18, 2023

What do you think @DanHarltey?

Closes #171
Closes #208
Closes #65
Closes #200

@khellang khellang changed the title Whitespace and line break tweaks Update to .NET 8 and leverage keyed services for decoration Aug 18, 2023
@codecov
Copy link

codecov bot commented Aug 18, 2023

Codecov Report

Attention: 36 lines in your changes are missing coverage. Please review.

Comparison is base (a634e58) 64.71% compared to head (7fcedf7) 66.15%.

Files Patch % Lines
src/Scrutor/TypeSourceSelector.cs 17.64% 14 Missing ⚠️
src/Scrutor/ServiceDescriptorExtensions.cs 35.71% 7 Missing and 2 partials ⚠️
.../Scrutor/ServiceCollectionExtensions.Decoration.cs 69.56% 5 Missing and 2 partials ⚠️
src/Scrutor/LifetimeSelector.cs 0.00% 3 Missing ⚠️
src/Scrutor/ClosedTypeDecorationStrategy.cs 83.33% 1 Missing ⚠️
src/Scrutor/DecorationStrategy.cs 94.11% 0 Missing and 1 partial ⚠️
src/Scrutor/OpenGenericDecorationStrategy.cs 75.00% 1 Missing ⚠️
Additional details and impacted files
@@            Coverage Diff             @@
##           master     #209      +/-   ##
==========================================
+ Coverage   64.71%   66.15%   +1.44%     
==========================================
  Files          25       24       -1     
  Lines        1278     1232      -46     
  Branches        0      112     +112     
==========================================
- Hits          827      815      -12     
+ Misses        451      387      -64     
- Partials        0       30      +30     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

Copy link
Contributor

@DanHarltey DanHarltey left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice. A lot nicer than the DecoratedType file, it is nasty. Surprised by how little of the code actually changes. This should allow more compatibility.

.github/workflows/build.yml Outdated Show resolved Hide resolved
src/Scrutor/ServiceCollectionExtensions.Decoration.cs Outdated Show resolved Hide resolved
src/Scrutor/ServiceDescriptorExtensions.cs Outdated Show resolved Hide resolved
@khellang
Copy link
Owner Author

khellang commented Sep 1, 2023

Thanks for the review, @DanHarltey! All good feedback 👍🏻

@khellang khellang marked this pull request as ready for review September 1, 2023 08:00
@dario-l
Copy link

dario-l commented Oct 11, 2023

Hi @khellang
When this will be available at the nuget package? We really need this. 😃

Please, please, please :)

PS
We are doing future project but as for now we are using NET8 RC2. Before our release we are switching to full NET8 ofcoz. 😄

@khellang
Copy link
Owner Author

I can probably target RC2 and publish a prerelease version if anyone's eager to test it out.

@dario-l
Copy link

dario-l commented Oct 11, 2023

I can probably target RC2 and publish a prerelease version if anyone's eager to test it out.

@khellang Yes please 🙏🏻

@dario-l
Copy link

dario-l commented Oct 12, 2023

Hi @khellang 😃
I'm just cloned branch for net8 and adopted source code into my project. 😄

Now I can wait for released version of net8 and newest scrutor 😃
I hope that Scan will have appropriate extensions for keyed services also. 👍🏻
Thanks for help. ❤️

@khellang
Copy link
Owner Author

I hope that Scan will have appropriate extensions for keyed services also. 👍🏻

What does that mean? How do you envision using keyed services with Scrutor?

@dario-l
Copy link

dario-l commented Oct 12, 2023

I hope that Scan will have appropriate extensions for keyed services also. 👍🏻

What does that mean? How do you envision using keyed services with Scrutor?

I would love to register services from given assembly as keyed with specified key,

For example. I have modular monolith. Each module is a separated project/assembly. I execute services.Scan(...) to register all ICommandHandler from that assembly. I want to register them as keyed services. Thanks to that I can resolve only those services in particular module.

For now I am using this hacky solution 😄

        var tempServices = new ServiceCollection();

        tempServices.Scan(  );
        
        foreach (var service in tempServices)
        {
                // register service as keyed
        }

It would be great to do this something like:

new ServiceCollection()
            .Scan(s => s.FromAssembliesOf(module.GetType())
                .AddClasses(c =>
                {
                    c.AssignableToAny(
                            typeof(ICommandHandler<,>),
                            typeof(ICommandHandler<>),
                            typeof(IQueryHandler<,>),
                            typeof(IEventHandler<>),
                            typeof(IDomainEventHandler<>))
                        .WithoutAttribute<DecoratorAttribute>();
                }, false)
                .AsKeyed(moduleName) //  <========
                .AsImplementedInterfaces()
                .WithScopedLifetime());

@khellang
Copy link
Owner Author

If it's allowed to register multiple services against the same key, it could work. I'll have to verify it.

@dario-l
Copy link

dario-l commented Oct 19, 2023

Hi @khellang :)
How about this? Will be any chance for this? 😃

@dario-l
Copy link

dario-l commented Nov 15, 2023

Hi @khellang ?

How about now, after NET8 premiere? 😄

@rekosko
Copy link

rekosko commented Jan 12, 2024

Still waiting :)

@khellang
Copy link
Owner Author

@rekosko What exactly are you waiting for? The latest version on NuGet works fine on .NET 8, right?

@rekosko
Copy link

rekosko commented Jan 12, 2024

@khellang yes I confirm it works on .NET 8 :) But decoration for keyed services is not yet implemented or I missed the purpose of this PR?

@khellang
Copy link
Owner Author

That's not the purpose of this PR, no. Although I want to add that as well before shipping a new version. This PR replaces an old hack to avoid StackOverflowExceptions when decorating services with keyed services under the covers. It also files a few other long-standing issues and pending breaking changes.

@khellang
Copy link
Owner Author

BTW, if anyone wants to contribute support for decorating keyed services to get a release out sooner, that would be cool.

@savornicesei
Copy link

savornicesei commented Feb 8, 2024

@khellang Can this be merged into master or it's not complete or it needs more testing? Or it's better to base all the tests and work on feature/net8.0 branch?

@khellang
Copy link
Owner Author

khellang commented Feb 8, 2024

It's not totally complete and needs more tests. It's better to base work off this branch for now. Once this goes into master, I will release a new major version.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
6 participants