-
-
Notifications
You must be signed in to change notification settings - Fork 239
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
Conversation
Codecov ReportAttention: Patch coverage is
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. |
There was a problem hiding this 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.
Thanks for the review, @DanHarltey! All good feedback 👍🏻 |
Hi @khellang Please, please, please :) PS |
I can probably target RC2 and publish a prerelease version if anyone's eager to test it out. |
@khellang Yes please 🙏🏻 |
Hi @khellang 😃 Now I can wait for released version of net8 and newest scrutor 😃 |
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 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()); |
If it's allowed to register multiple services against the same key, it could work. I'll have to verify it. |
Hi @khellang :) |
Hi @khellang ? How about now, after NET8 premiere? 😄 |
Still waiting :) |
@rekosko What exactly are you waiting for? The latest version on NuGet works fine on .NET 8, right? |
@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? |
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. |
BTW, if anyone wants to contribute support for decorating keyed services to get a release out sooner, that would be cool. |
@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 |
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. |
Gentle ping on this. I wonder what's the plan/fate for this PR? |
Howdy! Will Scrutor be ported to .NET 8? |
Just because the library targets .NET 6, doesn't mean it doesn't support .NET 8. It's perfectly fine to use packages targeting older framework versions on newer frameworks. Have you encountered any issues using the package on .NET 8? |
…es and AsSelfWithInterfaces
fca4de9
to
4d0ecf4
Compare
Everyone, I've gone ahead and merged this and released v5.0.0 to NuGet. Please try it out and report back if you find any issues 🙏🏻 Thanks for your patience 😊 |
Is there an example somewhere how to perform 'keyed registrations' using the latest Scrutor version? TIA |
As mentioned in #209 (comment), this isn't adding support for keyed registrations, it's merely (ab)using them internally to avoid StackOverflowExceptions when doing decoration 😄 If someone is up to the task to implement support for keyed registrations, I'd love to see it ❤️ Do you have any thoughts on what it would look like, @ThumbGen? |
Thanks for the fast reply. Sadly I have no thoughts on it, I am just an avid consumer of this lovely library :-( |
@khellang I saw this PR mentioned in the 5.0.1 release notes and just wanted to make sure I get this right: this change is just to rely on keyed service capabilities internally, but it results in the exact same behavior as before, including all the limitations that existed before. Is that a valid way of putting it? If not, could you elaborate on what this could end up changing or what limitations it removes in terms of using decorators? |
@julealgon That's correct, yes. Earlier, we relied internally on a huge hack to make decoration work, which ended up breaking a few scenarios, like Azure Functions. This PR replace that solution with a less hacky solution based on keyed services. There is a potential benefit of this, which is that you could resolved a keyed service to get a hold of the "original", wrapped, service, but that hasn't been tested fully. |
What do you think @DanHarltey?
Closes #171
Closes #208
Closes #65
Closes #200