/// <summary> /// Utility method resolves the type and logs and returns success. /// </summary> private static bool tryResolve( Type targetType, out object result, ServiceConstructorRequest request, IServiceRegistrationProvider serviceProvider, Func <Type, object> instanceProvider, bool logMustResolve) { bool CheckResult(object service, string sourceName, out object successResult) { if (targetType.IsInstanceOfType(service)) { request.TraceStack.Add($"{sourceName} resolved '{targetType.GetFriendlyFullName()}'."); successResult = service; return(true); } successResult = null; return(false); } if (instanceProvider != null) { if (CheckResult(instanceProvider(targetType), "InstanceProvider Func", out result)) { return(true); } } if (CheckResult(serviceProvider.GetService(targetType, request), nameof(IServiceProvider), out result)) { return(true); } if (serviceProvider.ParentServiceProvider is IServiceRegistrationProvider parentServiceRegistrationProvider) { if (CheckResult( parentServiceRegistrationProvider.GetService(targetType, request), nameof(IServiceRegistrationProvider.ParentServiceProvider), out result)) { return(true); } } else { if (CheckResult( serviceProvider.ParentServiceProvider?.GetService(targetType), nameof(IServiceRegistrationProvider.ParentServiceProvider), out result)) { return(true); } } if (logMustResolve) { request.TraceStack.Add($"Did not resolve '{targetType.GetFriendlyFullName()}'."); } return(false); }
private object tryGetService(Type serviceType, ServiceConstructorRequest serviceConstructorRequest) { if (serviceType == null) { throw new ArgumentNullException(nameof(serviceType)); } lock (registrations) { if (serviceConstructorRequest == null) { serviceConstructorRequest = newServiceConstructorRequest(); } return(registrations.TryGetValue(serviceType, out ServiceRegistration registration) ? registration.Get(serviceConstructorRequest) : parentServiceRegistrationProvider != null ? parentServiceRegistrationProvider.GetService(serviceType, serviceConstructorRequest) : parentServiceProvider?.GetService(serviceType)); } }
private object tryGetService( Type serviceType, ServiceConstructorRequest serviceConstructorRequest) { if (serviceType == null) { throw new ArgumentNullException(nameof(serviceType)); } object service = serviceProvider.GetService(serviceType); return(serviceType.IsInstanceOfType(service) ? service : parentServiceRegistrationProvider != null ? parentServiceRegistrationProvider.GetService( serviceType, serviceConstructorRequest ?? new ServiceConstructorRequest( TraceSources.For <ServiceRegistrationProviderWrapper>())) : ParentServiceProvider?.GetService(serviceType)); }