c# - Unity DI: Resolving from per-request to global singleton to per-request -


i have controller calling global singleton calling per-request-instance in context of asp.net webapi. basically

per-request => singleton => per-request

is below setup correct? i'm particularly worried second per-request instance, since user-based claims.

or anti-pattern , singleton should receive (per-request) dependencies controller?

    // unityconfig.cs, resolver uses createchildcontainer()     public static void registertypes(iunitycontainer unity)     {         // global singleton         unity.registertype<messagecontext>(new containercontrolledlifetimemanager());         // instance per request         unity.registertype<claimscontext>(new hierarchicallifetimemanager());     }      // api controller     public class mycontroller : apicontroller     {         private readonly messagecontext _message;          public formcontroller(messagecontext message)         {             _message = message;         }          public task<ihttpactionresult> myaction()         {             _message.fireandforget();             return ok();         }     }      // global singleton keep connection pool     public class messagecontext     {         private readonly iunitycontainer _unity;          public messagecontext(iunitycontainer unity)         {             _unity = unity;         }          public task fireandforget()         {             // resolve per request             var claim = _unity.resolve<claimscontext>().myclaim);             // ...         }     } 

as pointed out in comments, above sample code needs restructured. fix, split messagecontext long-lived , short-lived part. short-lived part receives short-lived claimscontext, while long-lived part holds onto long-lived connections.


Comments

Popular posts from this blog

Sort a complex associative array in PHP -

vb.net - How to ignore if a cell is empty nothing -

recursion - Can every recursive algorithm be improved with dynamic programming? -