Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • Andrei 15 posts 99 karma points
    Jul 09, 2021 @ 21:35
    Andrei
    0

    LightInject with Lifetime.Request scope - service class created twice?

    I have a service class which I register with Lifetime.Request via a composer.

    I noticed that my service class gets instantiated two times when I'm using it in a NotFoundContentFinder.

    First I'm getting my service class here via a DependencyResolver.GetService<> call inside the NotFoundContentFinder. Then I'm injecting the same service class in a controller and through some logging I can see that my class is created two times during the lifetime of this request. This does not happen with a normal page where NotFoundContentFinder is not triggered.

    Any idea what happens here? Is somehow the Request object dumped and recreated when the not-found chain gets triggered?

    [Update] Did some further checking to see if the HttpRequest object gets replaced/renewed during request processing, but it doesn't seem to be the case. I checked that by adding a mark into the request items collection and it was still in place when the second service instance was created.

  • Dan Diplo 1554 posts 6205 karma points MVP 6x c-trib
    Jul 20, 2021 @ 19:42
    Dan Diplo
    101

    You actually need to make it Lifetime.Scope as LifeTime.Request isn't what you think it it. Check the docs at https://our.umbraco.com/Documentation/Reference/Using-Ioc/

    Lifetime.Request - always creates a new instance: A new instance will get created each time it is injected. Instances will get disposed at the end of a web request.

    Purely used to dispose objects created during a request at the end of the request, this does not mean they'll only be created once per web request.

    Lifetime.Scope - one unique instance per web request (or "scope"): Only creates one instance per web request. Instances will get disposed at the end of a web request.

  • Andrei 15 posts 99 karma points
    Jul 20, 2021 @ 21:29
    Andrei
    1

    Ohh, that was a bit of a nasty blow. More so when I did read some related posts saying that lightinject has confusing naming, but somehow got the impression that umbraco masters have normalized these names to mean what they should. A bit surprised they chose to propagate the confusion.

    Kudos Dan, for clearing that up, thanks a lot.

    Cheers

  • Dan Diplo 1554 posts 6205 karma points MVP 6x c-trib
    Jul 21, 2021 @ 09:06
    Dan Diplo
    0

    Yeah, I made the same mistake, which is how I realised! I presume you might have read https://github.com/seesharper/LightInject/issues/494 ?

    I guess in Umbraco 9 they will be using the more normalised .NET conventions!

  • This forum is in read-only mode while we transition to the new forum.

    You can continue this topic on the new forum by tapping the "Continue discussion" link below.

Please Sign in or register to post replies