/// <summary> /// Initializes a new instance of the <see cref="T:CSF.FlexDi.Resolution.Proxies.UnregisteredServiceResolverProxy"/> class. /// </summary> /// <param name="proxiedResolver">Proxied resolver.</param> /// <param name="registrationResolver">Registration resolver.</param> /// <param name="unregisteredRegistrationProvider">Unregistered registration provider.</param> /// <param name="cache">The service cache.</param> /// <param name="registry">The service registry</param> public UnregisteredServiceResolverProxy(IResolver proxiedResolver, IResolvesRegistrations registrationResolver, IServiceRegistrationProvider unregisteredRegistrationProvider, ICachesResolvedServiceInstances cache, IRegistersServices registry) : base(proxiedResolver) { if (registry == null) { throw new ArgumentNullException(nameof(registry)); } if (unregisteredRegistrationProvider == null) { throw new ArgumentNullException(nameof(unregisteredRegistrationProvider)); } if (registrationResolver == null) { throw new ArgumentNullException(nameof(registrationResolver)); } this.cache = cache; this.registrationResolver = registrationResolver; this.unregisteredRegistrationProvider = unregisteredRegistrationProvider; this.registry = registry; }
/// <summary> /// Configures a collection of <see cref="T:CSF.FlexDi.Resolution.Proxies.ICreatesProxyingResolver" />. This method should add any number of /// such factories to the <paramref name="factories" /> collection. These will be added, in order, to the 'stack' /// of proxies in which to wrap created resolvers. /// </summary> /// <param name="factories">The resolver proxy factories to use.</param> /// <param name="isInnermostResolver">If set to <c>true</c> is innermost resolver.</param> /// <param name="coreResolver">The core resolver.</param> protected override void ConfigureResolverProxyFactories(IList <ICreatesProxyingResolver> factories, bool isInnermostResolver, IResolvesRegistrations coreResolver) { base.ConfigureResolverProxyFactories(factories, isInnermostResolver, coreResolver); factories.Add(new DynamicRecursionResolverProxyFactory()); }
/// <summary> /// Initializes a new instance of the /// <see cref="T:CSF.FlexDi.Resolution.Proxies.UnregisteredServiceResolverProxyFactory"/> class. /// </summary> /// <param name="registrationResolver">Registration resolver.</param> /// <param name="unregisteredRegistrationProvider">Unregistered registration provider.</param> public UnregisteredServiceResolverProxyFactory(IResolvesRegistrations registrationResolver, IServiceRegistrationProvider unregisteredRegistrationProvider = null) { if (registrationResolver == null) { throw new ArgumentNullException(nameof(registrationResolver)); } this.registrationResolver = registrationResolver; this.unregisteredRegistrationProvider = unregisteredRegistrationProvider; }
/// <summary> /// Configures a collection of <see cref="T:CSF.FlexDi.Resolution.Proxies.ICreatesProxyingResolver" />. This method should add any number of /// such factories to the <paramref name="factories" /> collection. These will be added, in order, to the 'stack' /// of proxies in which to wrap created resolvers. /// </summary> /// <param name="factories">The resolver proxy factories to use.</param> /// <param name="isInnermostResolver">If set to <c>true</c> is innermost resolver.</param> /// <param name="coreResolver">The core resolver.</param> protected override void ConfigureResolverProxyFactories(IList <ICreatesProxyingResolver> factories, bool isInnermostResolver, IResolvesRegistrations coreResolver) { factories.Add(new CachingResolverProxyFactory()); factories.Add(new FallbackToParentResolverProxyFactory(r => CreateResolver(r, false))); // Only the innermost resolver (the most deeply nested) can resolve unregistered services if (isInnermostResolver) { factories.Add(new UnregisteredServiceResolverProxyFactory(coreResolver)); } factories.Add(new CircularDependencyPreventingResolverProxyFactory()); factories.Add(new LazyInstanceResolverProxyFactory()); factories.Add(new RegisteredNameInjectingResolverProxyFactory()); factories.Add(new NamedInstanceDictionaryResolverProxyFactory()); factories.Add(new OptionalResolutionResolverProxyFactory()); factories.Add(new DynamicRecursionResolverProxyFactory()); }
public void Resolve_resolves_unregistered_service_when_resolution_is_unsuccesful([Frozen, ResolvesToFailure] IResolver proxiedResolver, [Frozen] IResolvesRegistrations registrationResolver, [Frozen] IServiceRegistrationProvider unregisteredRegistrationProvider, UnregisteredServiceResolverProxy sut, ResolutionPath path, ResolutionRequest request, ResolutionResult resolutionResult, IServiceRegistration registration) { // Arrange Mock.Get(proxiedResolver) .Setup(x => x.Resolve(request)) .Returns(ResolutionResult.Failure(path)); Mock.Get(unregisteredRegistrationProvider) .Setup(x => x.Get(request)) .Returns(registration); Mock.Get(registrationResolver) .Setup(x => x.Resolve(request, registration)) .Returns(resolutionResult); // Act var result = sut.Resolve(request); // Assert Assert.That(result, Is.SameAs(resolutionResult)); }
/// <summary> /// Configures a collection of <see cref="ICreatesProxyingResolver"/>. This method should add any number of /// such factories to the <paramref name="factories"/> collection. These will be added, in order, to the 'stack' /// of proxies in which to wrap created resolvers. /// </summary> /// <param name="factories">The resolver proxy factories to use.</param> /// <param name="isInnermostResolver">If set to <c>true</c> is innermost resolver.</param> /// <param name="coreResolver">The core resolver.</param> protected abstract void ConfigureResolverProxyFactories(IList <ICreatesProxyingResolver> factories, bool isInnermostResolver, IResolvesRegistrations coreResolver);