diff --git a/src/Splat.Autofac/AutofacDependencyResolver.cs b/src/Splat.Autofac/AutofacDependencyResolver.cs index 07d7e3588..73be503f1 100644 --- a/src/Splat.Autofac/AutofacDependencyResolver.cs +++ b/src/Splat.Autofac/AutofacDependencyResolver.cs @@ -38,16 +38,7 @@ public virtual object GetService(Type serviceType, string contract = null) { lock (_lockObject) { - try - { - return string.IsNullOrEmpty(contract) - ? _componentContext.Resolve(serviceType) - : _componentContext.ResolveNamed(contract, serviceType); - } - catch (DependencyResolutionException) - { - return null; - } + return Resolve(serviceType, contract); } } @@ -59,9 +50,7 @@ public virtual IEnumerable GetServices(Type serviceType, string contract try { var enumerableType = typeof(IEnumerable<>).MakeGenericType(serviceType); - object instance = string.IsNullOrEmpty(contract) - ? _componentContext.Resolve(enumerableType) - : _componentContext.ResolveNamed(contract, enumerableType); + var instance = Resolve(enumerableType, contract); return ((IEnumerable)instance).Cast(); } catch (DependencyResolutionException) @@ -337,6 +326,22 @@ private static bool HasNoContract(Service service) return !(service is KeyedService); } + private object Resolve(Type serviceType, string contract) + { + object serviceInstance; + + if (string.IsNullOrEmpty(contract)) + { + _componentContext.TryResolve(serviceType, out serviceInstance); + } + else + { + _componentContext.TryResolveNamed(contract, serviceType, out serviceInstance); + } + + return serviceInstance; + } + private void RemoveAndRebuild( int registrationCount, IList registrations,