/// <summary>
        /// Opens scope for OWIN pipeline as an IServiceProvider, scopename and scopecontext are for DryIoc containers.
        /// </summary>
        /// <param name="app"></param>
        /// <param name="locator"></param>
        /// <param name="serviceProviderTypeChecker"></param>
        public static void UseScopedLocator(this IAppBuilder app, ILocator locator, IServiceProviderTypeChecker serviceProviderTypeChecker = null)
        {
            app.Use(new Func<AppFunc, AppFunc>(next => (async context =>
            {
                var scoped = TryGetHttpScopedLocator(context, locator) as ILocatorScoped;
                var hasScopedLocator = scoped is object;
                scoped = scoped ?? locator.Get<ILocatorScopedFactory>().CreateScope(); // create via factory

                var contextAccessor = scoped.Get<IContextAccessor>();
                (contextAccessor as IContextSetter)
                    .SetContexts(new MiddlewareContext(context), context);

                context[ScopedLocatorKeyInContext] = scoped;
                context[ScopedProviderKeyInContext] = new ServiceProvider
                (
                    serviceProviderTypeChecker ?? scoped.Get<IServiceProviderTypeChecker>(),
                    scoped.Get<ILocatorScopedAccessor>()
                );

                // perform remaining tasks
                await next.Invoke(context);

                if (!hasScopedLocator)
                    scoped?.Dispose();
            })));
        }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="locator"></param>
 /// <param name="pipelineScope">Optional: if null, retrieved from locator</param>
 /// <param name="serviceProviderTypeChecker"></param>
 /// <param name="httpContextProvider"></param>
 /// <param name="locatorScopeFactory"></param>
 public WebApiDependencyResolver(ILocator locator, IPipelineScope pipelineScope = null, IServiceProviderTypeChecker serviceProviderTypeChecker = null, IHttpContextProvider httpContextProvider = null, ILocatorScopedFactory locatorScopeFactory = null)
 {
     _Locator       = locator;
     _PipelineScope = pipelineScope ?? _Locator.Get <IPipelineScope>();
     _ServiceProviderTypeChecker = serviceProviderTypeChecker ?? locator.Get <IServiceProviderTypeChecker>();
     _HttpContextProvider        = httpContextProvider ?? locator.Get <IHttpContextProvider>();
     _LocatorScopeFactory        = locatorScopeFactory ?? locator.Get <ILocatorScopedFactory>();
 }
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="locator"></param>
 /// <param name="serviceProviderTypeChecker"></param>
 /// <param name="httpContextProvider"></param>
 public ScopedDependencyResolver(ILocator locator, IServiceProviderTypeChecker serviceProviderTypeChecker, IHttpContextProvider httpContextProvider)
 {
     _Locator = locator;
     _ServiceProviderTypeChecker = serviceProviderTypeChecker ?? locator.Get <IServiceProviderTypeChecker>();
     _HttpContextProvider        = httpContextProvider ?? locator.Get <IHttpContextProvider>();
 }
Esempio n. 4
0
 /// <summary>
 /// Constructor
 /// </summary>
 /// <param name="locator"></param>
 /// <param name="serviceProviderTypeChecker"></param>
 /// <param name="httpContextProvider"></param>
 public StartupMvc(ILocator locator, IServiceProviderTypeChecker serviceProviderTypeChecker, IHttpContextProvider httpContextProvider)
 {
     _Locator = locator;
     _ServiceProviderTypeChecker = serviceProviderTypeChecker;
     _HttpContextProvider        = httpContextProvider;
 }
Esempio n. 5
0
 /// <summary>
 /// Singleton Constructor, greediest one to use
 /// </summary>
 /// <param name="locatorAmbient"></param>
 /// <param name="serviceProviderTypeChecker"></param>
 /// <param name="startupConfiguration"></param>
 public ServiceProvider(ILocatorAmbient locatorAmbient, IServiceProviderTypeChecker serviceProviderTypeChecker, IStartupConfiguration startupConfiguration)
 {
     _locatorAmbient             = locatorAmbient;
     _serviceProviderTypeChecker = serviceProviderTypeChecker;
 }
Esempio n. 6
0
 /// <summary>
 /// Scoped Constructor for OWIN and netcore
 /// </summary>
 /// <param name="serviceProviderTypeChecker"></param>
 /// <param name="locatorScopedAccessor"></param>
 public ServiceProvider(IServiceProviderTypeChecker serviceProviderTypeChecker, ILocatorScopedAccessor locatorScopedAccessor)
 {
     _scopeAccessor = locatorScopedAccessor;
     _serviceProviderTypeChecker = serviceProviderTypeChecker;
 }