Pattern for multiple renderings calling same service












2















Scenario



A page contains several separate renderings. Each rendering displays some data which is returned from a remote service. Several of these data items come from the same remote service.



This leads to that service being requested multiple times per page load, which seems inefficient.



Separate renderings are desirable as they can be used elsewhere on the website, and provides content editors flexibility.



Solutions



Does an established pattern exist to handle this scenario in an efficient way?










share|improve this question



























    2















    Scenario



    A page contains several separate renderings. Each rendering displays some data which is returned from a remote service. Several of these data items come from the same remote service.



    This leads to that service being requested multiple times per page load, which seems inefficient.



    Separate renderings are desirable as they can be used elsewhere on the website, and provides content editors flexibility.



    Solutions



    Does an established pattern exist to handle this scenario in an efficient way?










    share|improve this question

























      2












      2








      2








      Scenario



      A page contains several separate renderings. Each rendering displays some data which is returned from a remote service. Several of these data items come from the same remote service.



      This leads to that service being requested multiple times per page load, which seems inefficient.



      Separate renderings are desirable as they can be used elsewhere on the website, and provides content editors flexibility.



      Solutions



      Does an established pattern exist to handle this scenario in an efficient way?










      share|improve this question














      Scenario



      A page contains several separate renderings. Each rendering displays some data which is returned from a remote service. Several of these data items come from the same remote service.



      This leads to that service being requested multiple times per page load, which seems inefficient.



      Separate renderings are desirable as they can be used elsewhere on the website, and provides content editors flexibility.



      Solutions



      Does an established pattern exist to handle this scenario in an efficient way?







      presentation






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked 2 hours ago









      SteveSteve

      1555




      1555






















          1 Answer
          1






          active

          oldest

          votes


















          4














          Register the service in your DI scoped for the request.



          When the first component calls the service, save the value in the service.



          When next component wants the same data, the service will already have it.



          I used this blog post as a guide how to:



          https://www.coreysmith.co/sitecore-dependency-injection-scoped-services/



          In shortcut - register service:



          public class ExampleConfigurator : IServicesConfigurator
          {
          public void Configure(IServiceCollection serviceCollection)
          {
          serviceCollection.AddScoped<IScopedService, ScopedService>();
          }
          }


          And the service itself:



          public class ScopedService : IScopedService
          {
          private object _externalData;
          public object ExternalData
          {
          get { return _externalData ?? (_externalData = GetDataFromExternalProvider()); }
          }
          }


          And register the configurator:



          <configuration>
          <sitecore>
          <services>
          <configurator type= "ExampleConfigurator, MyAssembly"/>
          </services>
          </sitecore>
          <configuration>





          share|improve this answer


























            Your Answer








            StackExchange.ready(function() {
            var channelOptions = {
            tags: "".split(" "),
            id: "664"
            };
            initTagRenderer("".split(" "), "".split(" "), channelOptions);

            StackExchange.using("externalEditor", function() {
            // Have to fire editor after snippets, if snippets enabled
            if (StackExchange.settings.snippets.snippetsEnabled) {
            StackExchange.using("snippets", function() {
            createEditor();
            });
            }
            else {
            createEditor();
            }
            });

            function createEditor() {
            StackExchange.prepareEditor({
            heartbeatType: 'answer',
            autoActivateHeartbeat: false,
            convertImagesToLinks: false,
            noModals: true,
            showLowRepImageUploadWarning: true,
            reputationToPostImages: null,
            bindNavPrevention: true,
            postfix: "",
            imageUploader: {
            brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
            contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
            allowUrls: true
            },
            onDemand: true,
            discardSelector: ".discard-answer"
            ,immediatelyShowMarkdownHelp:true
            });


            }
            });














            draft saved

            draft discarded


















            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsitecore.stackexchange.com%2fquestions%2f17864%2fpattern-for-multiple-renderings-calling-same-service%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown

























            1 Answer
            1






            active

            oldest

            votes








            1 Answer
            1






            active

            oldest

            votes









            active

            oldest

            votes






            active

            oldest

            votes









            4














            Register the service in your DI scoped for the request.



            When the first component calls the service, save the value in the service.



            When next component wants the same data, the service will already have it.



            I used this blog post as a guide how to:



            https://www.coreysmith.co/sitecore-dependency-injection-scoped-services/



            In shortcut - register service:



            public class ExampleConfigurator : IServicesConfigurator
            {
            public void Configure(IServiceCollection serviceCollection)
            {
            serviceCollection.AddScoped<IScopedService, ScopedService>();
            }
            }


            And the service itself:



            public class ScopedService : IScopedService
            {
            private object _externalData;
            public object ExternalData
            {
            get { return _externalData ?? (_externalData = GetDataFromExternalProvider()); }
            }
            }


            And register the configurator:



            <configuration>
            <sitecore>
            <services>
            <configurator type= "ExampleConfigurator, MyAssembly"/>
            </services>
            </sitecore>
            <configuration>





            share|improve this answer






























              4














              Register the service in your DI scoped for the request.



              When the first component calls the service, save the value in the service.



              When next component wants the same data, the service will already have it.



              I used this blog post as a guide how to:



              https://www.coreysmith.co/sitecore-dependency-injection-scoped-services/



              In shortcut - register service:



              public class ExampleConfigurator : IServicesConfigurator
              {
              public void Configure(IServiceCollection serviceCollection)
              {
              serviceCollection.AddScoped<IScopedService, ScopedService>();
              }
              }


              And the service itself:



              public class ScopedService : IScopedService
              {
              private object _externalData;
              public object ExternalData
              {
              get { return _externalData ?? (_externalData = GetDataFromExternalProvider()); }
              }
              }


              And register the configurator:



              <configuration>
              <sitecore>
              <services>
              <configurator type= "ExampleConfigurator, MyAssembly"/>
              </services>
              </sitecore>
              <configuration>





              share|improve this answer




























                4












                4








                4







                Register the service in your DI scoped for the request.



                When the first component calls the service, save the value in the service.



                When next component wants the same data, the service will already have it.



                I used this blog post as a guide how to:



                https://www.coreysmith.co/sitecore-dependency-injection-scoped-services/



                In shortcut - register service:



                public class ExampleConfigurator : IServicesConfigurator
                {
                public void Configure(IServiceCollection serviceCollection)
                {
                serviceCollection.AddScoped<IScopedService, ScopedService>();
                }
                }


                And the service itself:



                public class ScopedService : IScopedService
                {
                private object _externalData;
                public object ExternalData
                {
                get { return _externalData ?? (_externalData = GetDataFromExternalProvider()); }
                }
                }


                And register the configurator:



                <configuration>
                <sitecore>
                <services>
                <configurator type= "ExampleConfigurator, MyAssembly"/>
                </services>
                </sitecore>
                <configuration>





                share|improve this answer















                Register the service in your DI scoped for the request.



                When the first component calls the service, save the value in the service.



                When next component wants the same data, the service will already have it.



                I used this blog post as a guide how to:



                https://www.coreysmith.co/sitecore-dependency-injection-scoped-services/



                In shortcut - register service:



                public class ExampleConfigurator : IServicesConfigurator
                {
                public void Configure(IServiceCollection serviceCollection)
                {
                serviceCollection.AddScoped<IScopedService, ScopedService>();
                }
                }


                And the service itself:



                public class ScopedService : IScopedService
                {
                private object _externalData;
                public object ExternalData
                {
                get { return _externalData ?? (_externalData = GetDataFromExternalProvider()); }
                }
                }


                And register the configurator:



                <configuration>
                <sitecore>
                <services>
                <configurator type= "ExampleConfigurator, MyAssembly"/>
                </services>
                </sitecore>
                <configuration>






                share|improve this answer














                share|improve this answer



                share|improve this answer








                edited 1 hour ago

























                answered 2 hours ago









                Marek MusielakMarek Musielak

                11.4k11136




                11.4k11136






























                    draft saved

                    draft discarded




















































                    Thanks for contributing an answer to Sitecore Stack Exchange!


                    • Please be sure to answer the question. Provide details and share your research!

                    But avoid



                    • Asking for help, clarification, or responding to other answers.

                    • Making statements based on opinion; back them up with references or personal experience.


                    To learn more, see our tips on writing great answers.




                    draft saved


                    draft discarded














                    StackExchange.ready(
                    function () {
                    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsitecore.stackexchange.com%2fquestions%2f17864%2fpattern-for-multiple-renderings-calling-same-service%23new-answer', 'question_page');
                    }
                    );

                    Post as a guest















                    Required, but never shown





















































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown

































                    Required, but never shown














                    Required, but never shown












                    Required, but never shown







                    Required, but never shown







                    Popular posts from this blog

                    flock() on closed filehandle LOCK_FILE at /usr/bin/apt-mirror

                    Mangá

                     ⁒  ․,‪⁊‑⁙ ⁖, ⁇‒※‌, †,⁖‗‌⁝    ‾‸⁘,‖⁔⁣,⁂‾
”‑,‥–,‬ ,⁀‹⁋‴⁑ ‒ ,‴⁋”‼ ⁨,‷⁔„ ‰′,‐‚ ‥‡‎“‷⁃⁨⁅⁣,⁔
⁇‘⁔⁡⁏⁌⁡‿‶‏⁨ ⁣⁕⁖⁨⁩⁥‽⁀  ‴‬⁜‟ ⁃‣‧⁕‮ …‍⁨‴ ⁩,⁚⁖‫ ,‵ ⁀,‮⁝‣‣ ⁑  ⁂– ․, ‾‽ ‏⁁“⁗‸ ‾… ‹‡⁌⁎‸‘ ‡⁏⁌‪ ‵⁛ ‎⁨ ―⁦⁤⁄⁕