@@ -25,7 +25,7 @@ public class ApplicationContextManager : IContextManager
25
25
private const string _clientContextName = "Csla.ClientContext" ;
26
26
private const string _globalContextName = "Csla.GlobalContext" ;
27
27
28
- private readonly IServiceProvider _serviceProvider ;
28
+ private IServiceProvider _serviceProvider ;
29
29
30
30
/// <summary>
31
31
/// Creates an instance of the object, initializing it
@@ -146,7 +146,9 @@ public void SetGlobalContext(ContextDictionary globalContext)
146
146
/// </summary>
147
147
public IServiceProvider GetDefaultServiceProvider ( )
148
148
{
149
- return HttpContext ? . RequestServices ;
149
+ // on aspnet core we proactively detect request scope, before falling back to root application scope.
150
+ // this saves users from having to SetServiceProvider() at the start of every request.
151
+ return HttpContext ? . RequestServices ?? _serviceProvider ;
150
152
}
151
153
152
154
/// <summary>
@@ -155,23 +157,24 @@ public IServiceProvider GetDefaultServiceProvider()
155
157
/// <param name="serviceProvider">IServiceProvider instance</param>
156
158
public void SetDefaultServiceProvider ( IServiceProvider serviceProvider )
157
159
{
158
- /* ignore value - we get the one from HttpContext */
160
+ // Service provider to be used as fallback when there is no more specific scoped service provider available.
161
+ _serviceProvider = serviceProvider ;
159
162
}
160
163
161
164
/// <summary>
162
- /// Gets the service provider scope
165
+ /// Gets the service provider for current scope
163
166
/// </summary>
164
167
/// <returns></returns>
165
- public IServiceScope GetServiceProviderScope ( )
168
+ public IServiceProvider GetServiceProvider ( )
166
169
{
167
- return ( IServiceScope ) ApplicationContext . LocalContext [ "__sps" ] ;
170
+ return ( IServiceProvider ) ApplicationContext . LocalContext [ "__sps" ] ?? GetDefaultServiceProvider ( ) ;
168
171
}
169
172
170
173
/// <summary>
171
- /// Sets the service provider scope
174
+ /// Sets the service provider for current scope
172
175
/// </summary>
173
- /// <param name="scope">IServiceScope instance</param>
174
- public void SetServiceProviderScope ( IServiceScope scope )
176
+ /// <param name="scope">IServiceProvider instance</param>
177
+ public void SetServiceProvider ( IServiceProvider scope )
175
178
{
176
179
Csla . ApplicationContext . LocalContext [ "__sps" ] = scope ;
177
180
}
0 commit comments