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
Post a Comment