From 4e6d598a5685658e699732f9db8c60534a17d02d Mon Sep 17 00:00:00 2001 From: Christopher Watford Date: Wed, 14 Apr 2021 16:17:34 -0400 Subject: [PATCH] Connect to ASP.Net WebAPI DependencyResolver Also ensure that optional dependencies do not throw. --- ...ndencyInjectionWebApiDependencyResolver.cs | 23 +++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/AspNetDependencyInjection.WebApi/DependencyInjectionWebApiDependencyResolver.cs b/AspNetDependencyInjection.WebApi/DependencyInjectionWebApiDependencyResolver.cs index 94c190a..59b06bb 100644 --- a/AspNetDependencyInjection.WebApi/DependencyInjectionWebApiDependencyResolver.cs +++ b/AspNetDependencyInjection.WebApi/DependencyInjectionWebApiDependencyResolver.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Linq; +using System.Web.Http; using System.Web.Http.Controllers; using System.Web.Http.Dependencies; @@ -22,6 +23,8 @@ internal DependencyInjectionWebApiDependencyResolver( ApplicationDependencyInjec { this.di = di ?? throw new ArgumentNullException(nameof(di)); this.rootServiceProvider = rootServiceProvider ?? throw new ArgumentNullException( nameof( rootServiceProvider ) ); + + GlobalConfiguration.Configuration.DependencyResolver = this; } /// When is for a then the type will be resolved, otherwise an exception is thrown. Otherwise this method returns null if the type cannot be resolved or created. @@ -39,7 +42,15 @@ public Object GetService(Type serviceType) return this.di.ObjectFactoryCache.GetRequiredRootService( serviceType, useOverrides: true ); } - return this.di.ObjectFactoryCache.TryGetRootService( serviceType, useOverrides: true, out Object resolved ) ? resolved : null; + try + { + return this.di.ObjectFactoryCache.TryGetRootService( serviceType, useOverrides: true, out Object resolved ) ? resolved : null; + } + catch + { + // ASP.Net WebApi: all other dependencies are optional + return null; + } } /// Calls by converting to . @@ -92,7 +103,15 @@ public Object GetService( Type serviceType ) return this.di.ObjectFactoryCache.GetRequiredService( this.GetServiceProvider, serviceType, useOverrides: true ); } - return this.di.ObjectFactoryCache.TryGetService( this.GetServiceProvider, serviceType, useOverrides: true, out Object resolved ) ? resolved : null; + try + { + return this.di.ObjectFactoryCache.TryGetService( this.GetServiceProvider, serviceType, useOverrides: true, out Object resolved ) ? resolved : null; + } + catch + { + // ASP.Net WebApi: all other dependencies are optional + return null; + } } /// Calls by converting to .