Skip to content

Commit

Permalink
Move some methods of IDependencyResolver to extensions
Browse files Browse the repository at this point in the history
  • Loading branch information
z4kn4fein committed Jun 17, 2023
1 parent b6f64ef commit adf08ff
Show file tree
Hide file tree
Showing 14 changed files with 308 additions and 676 deletions.
2 changes: 1 addition & 1 deletion .version
Original file line number Diff line number Diff line change
@@ -1 +1 @@
5.10.2
5.11.0
2 changes: 1 addition & 1 deletion docs/docs/advanced/wrappers-resolvers.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ Stashbox uses so-called *Wrapper* and *Resolver* implementations to handle speci
* `FuncWrapper`: Used to resolve services [wrapped](/docs/advanced/wrappers-resolvers#delegate) in a `Delegate` that has a non-void return type like `Func<>`.
* `MetadataWrapper`: Used to resolve services [wrapped](/docs/advanced/wrappers-resolvers#metadata--tuple) in `ValueTuple<,>`, `Tuple<,>`, or `Metadata<,>`.
* `KeyValueWrapper`: Used to resolve services [wrapped](/docs/advanced/wrappers-resolvers#keyvaluepair--readonlykeyvalue) in `KeyValuePair<,>` or `ReadOnlyKeyValue<,>`.
* `ServiceProviderResolver`: User to resolve the actual scope as `IServiceProvider` when no other implementation is registered.
* `ServiceProviderResolver`: Used to resolve the actual scope as `IServiceProvider` when no other implementation is registered.
* `OptionalValueResolver`: Used to resolve optional parameters.
* `DefaultValueResolver`: Used to resolve default values.
* `ParentContainerResolver`: Used to resolve services that are only registered in one of the parent containers.
Expand Down
148 changes: 3 additions & 145 deletions src/IDependencyResolver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -22,32 +22,6 @@ public interface IDependencyResolver : IServiceProvider,
/// <returns>The resolved object.</returns>
object Resolve(Type typeFrom);

/// <summary>
/// Resolves an instance from the container.
/// </summary>
/// <param name="typeFrom">The type of the requested service.</param>
/// <param name="resolutionBehavior">The resolution behavior.</param>
/// <returns>The resolved object.</returns>
object Resolve(Type typeFrom, ResolutionBehavior resolutionBehavior);

/// <summary>
/// Resolves an instance from the container with dependency overrides.
/// </summary>
/// <param name="typeFrom">The type of the requested service.</param>
/// <param name="dependencyOverrides">A collection of objects which are used to override certain dependencies of the requested service.</param>
/// <param name="resolutionBehavior">The resolution behavior.</param>
/// <returns>The resolved object.</returns>
object Resolve(Type typeFrom, object[] dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default);

/// <summary>
/// Resolves a named instance from the container.
/// </summary>
/// <param name="typeFrom">The type of the requested service.</param>
/// <param name="name">The name of the requested service.</param>
/// <param name="resolutionBehavior">The resolution behavior.</param>
/// <returns>The resolved object.</returns>
object Resolve(Type typeFrom, object? name, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default);

/// <summary>
/// Resolves a named instance from the container with dependency overrides.
/// </summary>
Expand All @@ -56,7 +30,7 @@ public interface IDependencyResolver : IServiceProvider,
/// <param name="dependencyOverrides">A collection of objects which are used to override certain dependencies of the requested service.</param>
/// <param name="resolutionBehavior">The resolution behavior.</param>
/// <returns>The resolved object.</returns>
object Resolve(Type typeFrom, object? name, object[] dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default);
object Resolve(Type typeFrom, object? name, object[]? dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default);

/// <summary>
/// Resolves an instance from the container or returns default if the type is not resolvable.
Expand All @@ -65,32 +39,6 @@ public interface IDependencyResolver : IServiceProvider,
/// <returns>The resolved object.</returns>
object? ResolveOrDefault(Type typeFrom);

/// <summary>
/// Resolves an instance from the container or returns default if the type is not resolvable.
/// </summary>
/// <param name="typeFrom">The type of the requested service.</param>
/// <param name="resolutionBehavior">The resolution behavior.</param>
/// <returns>The resolved object.</returns>
object? ResolveOrDefault(Type typeFrom, ResolutionBehavior resolutionBehavior);

/// <summary>
/// Resolves an instance from the container with dependency overrides or returns default if the type is not resolvable.
/// </summary>
/// <param name="typeFrom">The type of the requested service.</param>
/// <param name="dependencyOverrides">A collection of objects which are used to override certain dependencies of the requested service.</param>
/// <param name="resolutionBehavior">The resolution behavior.</param>
/// <returns>The resolved object.</returns>
object? ResolveOrDefault(Type typeFrom, object[] dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default);

/// <summary>
/// Resolves a named instance from the container or returns default if the type is not resolvable.
/// </summary>
/// <param name="typeFrom">The type of the requested service.</param>
/// <param name="name">The name of the requested service.</param>
/// <param name="resolutionBehavior">The resolution behavior.</param>
/// <returns>The resolved object.</returns>
object? ResolveOrDefault(Type typeFrom, object? name, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default);

/// <summary>
/// Resolves an instance from the container with dependency overrides or returns default if the type is not resolvable.
/// </summary>
Expand All @@ -99,79 +47,7 @@ public interface IDependencyResolver : IServiceProvider,
/// <param name="dependencyOverrides">A collection of objects which are used to override certain dependencies of the requested service.</param>
/// <param name="resolutionBehavior">The resolution behavior.</param>
/// <returns>The resolved object.</returns>
object? ResolveOrDefault(Type typeFrom, object? name, object[] dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default);

/// <summary>
/// Resolves all registered implementations of a service.
/// </summary>
/// <typeparam name="TKey">The type of the requested service.</typeparam>
/// <param name="resolutionBehavior">The resolution behavior.</param>
/// <returns>The resolved object.</returns>
IEnumerable<TKey> ResolveAll<TKey>(ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default);

/// <summary>
/// Resolves all registered implementations of a service identified by a name.
/// </summary>
/// <typeparam name="TKey">The type of the requested service.</typeparam>
/// <param name="name">The name of the requested service.</param>
/// <param name="resolutionBehavior">The resolution behavior.</param>
/// <returns>The resolved object.</returns>
IEnumerable<TKey> ResolveAll<TKey>(object? name, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default);

/// <summary>
/// Resolves all registered implementations of a service with dependency overrides.
/// </summary>
/// <typeparam name="TKey">The type of the requested service.</typeparam>
/// <param name="dependencyOverrides">A collection of objects which are used to override certain dependencies of the requested services.</param>
/// <param name="resolutionBehavior">The resolution behavior.</param>
/// <returns>The resolved object.</returns>
IEnumerable<TKey> ResolveAll<TKey>(object[] dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default);

/// <summary>
/// Resolves all registered implementations of a service identified by a name and with dependency overrides.
/// </summary>
/// <typeparam name="TKey">The type of the requested services.</typeparam>
/// <param name="name">The name of the requested services.</param>
/// <param name="dependencyOverrides">A collection of objects which are used to override certain dependencies of the requested services.</param>
/// <param name="resolutionBehavior">The resolution behavior.</param>
/// <returns>The resolved object.</returns>
IEnumerable<TKey> ResolveAll<TKey>(object? name, object[] dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default);

/// <summary>
/// Resolves all registered implementations of a service.
/// </summary>
/// <param name="typeFrom">The type of the requested services.</param>
/// <param name="resolutionBehavior">The resolution behavior.</param>
/// <returns>The resolved object.</returns>
IEnumerable<object> ResolveAll(Type typeFrom, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default);

/// <summary>
/// Resolves all registered implementations of a service.
/// </summary>
/// <param name="typeFrom">The type of the requested services.</param>
/// <param name="name">The name of the requested services.</param>
/// <param name="resolutionBehavior">The resolution behavior.</param>
/// <returns>The resolved object.</returns>
IEnumerable<object> ResolveAll(Type typeFrom, object? name, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default);

/// <summary>
/// Resolves all registered implementations of a service with dependency overrides.
/// </summary>
/// <param name="typeFrom">The type of the requested services.</param>
/// <param name="dependencyOverrides">A collection of objects which are used to override certain dependencies of the requested services.</param>
/// <param name="resolutionBehavior">The resolution behavior.</param>
/// <returns>The resolved object.</returns>
IEnumerable<object> ResolveAll(Type typeFrom, object[] dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default);

/// <summary>
/// Resolves all registered implementations of a service with dependency overrides.
/// </summary>
/// <param name="typeFrom">The type of the requested services.</param>
/// <param name="name">The name of the requested services.</param>
/// <param name="dependencyOverrides">A collection of objects which are used to override certain dependencies of the requested services.</param>
/// <param name="resolutionBehavior">The resolution behavior.</param>
/// <returns>The resolved object.</returns>
IEnumerable<object> ResolveAll(Type typeFrom, object? name, object[] dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default);
object? ResolveOrDefault(Type typeFrom, object? name, object[]? dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default);

/// <summary>
/// Returns a factory delegate that can be used to activate the service.
Expand Down Expand Up @@ -223,16 +99,7 @@ TTo BuildUp<TTo>(TTo instance, ResolutionBehavior resolutionBehavior = Resolutio

/// <summary>
/// Activates an object without registering it into the container. If you want to resolve a
/// registered service use the <see cref="Resolve(Type, object[], ResolutionBehavior)" /> method instead.
/// </summary>
/// <param name="type">The type to activate.</param>
/// <param name="arguments">Optional dependency overrides.</param>
/// <returns>The built object.</returns>
object Activate(Type type, params object[] arguments);

/// <summary>
/// Activates an object without registering it into the container. If you want to resolve a
/// registered service use the <see cref="Resolve(Type, object[], ResolutionBehavior)" /> method instead.
/// registered service use the <see cref="Resolve(Type)" /> method instead.
/// </summary>
/// <param name="type">The type to activate.</param>
/// <param name="resolutionBehavior">The resolution behavior.</param>
Expand All @@ -247,15 +114,6 @@ TTo BuildUp<TTo>(TTo instance, ResolutionBehavior resolutionBehavior = Resolutio
/// <returns>The initializer task.</returns>
ValueTask InvokeAsyncInitializers(CancellationToken token = default);

/// <summary>
/// Checks whether a type can be resolved by the container, or not.
/// </summary>
/// <typeparam name="TFrom">The service type.</typeparam>
/// <param name="name">The registration name.</param>
/// <param name="resolutionBehavior">The resolution behavior.</param>
/// <returns>True if the service can be resolved, otherwise false.</returns>
bool CanResolve<TFrom>(object? name = null, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default);

/// <summary>
/// Checks whether a type can be resolved by the container, or not.
/// </summary>
Expand Down
36 changes: 2 additions & 34 deletions src/Multitenant/TenantDistributor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -115,39 +115,11 @@ public IStashboxContainer WireUp<TInstance>(TInstance instance, object? name = n
/// <inheritdoc />
public object Resolve(Type typeFrom) => rootContainer.Resolve(typeFrom);
/// <inheritdoc />
public object Resolve(Type typeFrom, ResolutionBehavior resolutionBehavior) => rootContainer.Resolve(typeFrom, resolutionBehavior);
/// <inheritdoc />
public object Resolve(Type typeFrom, object[] dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) => rootContainer.Resolve(typeFrom, dependencyOverrides, resolutionBehavior);
/// <inheritdoc />
public object Resolve(Type typeFrom, object? name, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) => rootContainer.Resolve(typeFrom, name, resolutionBehavior);
/// <inheritdoc />
public object Resolve(Type typeFrom, object? name, object[] dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) => rootContainer.Resolve(typeFrom, name, dependencyOverrides, resolutionBehavior);
public object Resolve(Type typeFrom, object? name, object[]? dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) => rootContainer.Resolve(typeFrom, name, dependencyOverrides, resolutionBehavior);
/// <inheritdoc />
public object? ResolveOrDefault(Type typeFrom) => rootContainer.ResolveOrDefault(typeFrom);
/// <inheritdoc />
public object? ResolveOrDefault(Type typeFrom, ResolutionBehavior resolutionBehavior) => rootContainer.ResolveOrDefault(typeFrom, resolutionBehavior);
/// <inheritdoc />
public object? ResolveOrDefault(Type typeFrom, object[] dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) => rootContainer.ResolveOrDefault(typeFrom, dependencyOverrides, resolutionBehavior);
/// <inheritdoc />
public object? ResolveOrDefault(Type typeFrom, object? name, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) => rootContainer.ResolveOrDefault(typeFrom, name, resolutionBehavior);
/// <inheritdoc />
public object? ResolveOrDefault(Type typeFrom, object? name, object[] dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) => rootContainer.ResolveOrDefault(typeFrom, name, dependencyOverrides, resolutionBehavior);
/// <inheritdoc />
public IEnumerable<TKey> ResolveAll<TKey>(ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) => rootContainer.ResolveAll<TKey>(resolutionBehavior);
/// <inheritdoc />
public IEnumerable<TKey> ResolveAll<TKey>(object? name, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) => rootContainer.ResolveAll<TKey>(name, resolutionBehavior);
/// <inheritdoc />
public IEnumerable<TKey> ResolveAll<TKey>(object[] dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) => rootContainer.ResolveAll<TKey>(dependencyOverrides, resolutionBehavior);
/// <inheritdoc />
public IEnumerable<TKey> ResolveAll<TKey>(object? name, object[] dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) => rootContainer.ResolveAll<TKey>(name, dependencyOverrides, resolutionBehavior);
/// <inheritdoc />
public IEnumerable<object> ResolveAll(Type typeFrom, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) => rootContainer.ResolveAll(typeFrom, resolutionBehavior);
/// <inheritdoc />
public IEnumerable<object> ResolveAll(Type typeFrom, object? name, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) => rootContainer.ResolveAll(typeFrom, name, resolutionBehavior);
/// <inheritdoc />
public IEnumerable<object> ResolveAll(Type typeFrom, object[] dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) => rootContainer.ResolveAll(typeFrom, dependencyOverrides, resolutionBehavior);
/// <inheritdoc />
public IEnumerable<object> ResolveAll(Type typeFrom, object? name, object[] dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) => rootContainer.ResolveAll(typeFrom, name, dependencyOverrides, resolutionBehavior);
public object? ResolveOrDefault(Type typeFrom, object? name, object[]? dependencyOverrides, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) => rootContainer.ResolveOrDefault(typeFrom, name, dependencyOverrides, resolutionBehavior);
/// <inheritdoc />
public Delegate ResolveFactory(Type typeFrom, object? name = null, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default, params Type[] parameterTypes) => rootContainer.ResolveFactory(typeFrom, name, resolutionBehavior, parameterTypes);
/// <inheritdoc />
Expand All @@ -159,14 +131,10 @@ public IStashboxContainer WireUp<TInstance>(TInstance instance, object? name = n
/// <inheritdoc />
public TTo BuildUp<TTo>(TTo instance, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) where TTo : class => rootContainer.BuildUp(instance, resolutionBehavior);
/// <inheritdoc />
public object Activate(Type type, params object[] arguments) => rootContainer.Activate(type, arguments);
/// <inheritdoc />
public object Activate(Type type, ResolutionBehavior resolutionBehavior, params object[] arguments) => rootContainer.Activate(type, resolutionBehavior, arguments);
/// <inheritdoc />
public ValueTask InvokeAsyncInitializers(CancellationToken token = default) => rootContainer.InvokeAsyncInitializers(token);
/// <inheritdoc />
public bool CanResolve<TFrom>(object? name = null, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) => rootContainer.CanResolve<TFrom>(name);
/// <inheritdoc />
public bool CanResolve(Type typeFrom, object? name = null, ResolutionBehavior resolutionBehavior = ResolutionBehavior.Default) => rootContainer.CanResolve(typeFrom, name);
/// <inheritdoc />
public IEnumerable<DelegateCacheEntry> GetDelegateCacheEntries() => rootContainer.GetDelegateCacheEntries();
Expand Down
2 changes: 1 addition & 1 deletion src/Registration/Fluent/FluentServiceConfigurator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -222,7 +222,7 @@ internal FluentServiceConfigurator(Type serviceType, Type implementationType, ob
{ }

/// <summary>
/// Indicates that the service's resolution should be handled by a dynamic <see cref="IDependencyResolver.Resolve(Type, ResolutionBehavior)"/> call on the current <see cref="IDependencyResolver"/> instead of a pre-built instantiation expression.
/// Indicates that the service's resolution should be handled by a dynamic <see cref="IDependencyResolver.Resolve(Type)"/> call on the current <see cref="IDependencyResolver"/> instead of a pre-built instantiation expression.
/// </summary>
/// <returns></returns>
public TConfigurator WithDynamicResolution()
Expand Down
Loading

0 comments on commit adf08ff

Please sign in to comment.