#61: set dispose strategy and parameters for each child registration

master
Simon G. 1 month ago
parent 1e92358719
commit ee7164cf95
Signed by: SimonG
GPG Key ID: 0B82B964BA536523
  1. 25
      LightweightIocContainer/LightweightIocContainer.xml
  2. 45
      LightweightIocContainer/Registrations/MultipleRegistration.cs
  3. 2
      LightweightIocContainer/Registrations/RegistrationBase.cs

@ -1344,6 +1344,31 @@
A <see cref="T:System.Collections.Generic.List`1"/> of <see cref="T:LightweightIocContainer.Interfaces.Registrations.IRegistration"/>s that are registered within this <see cref="T:LightweightIocContainer.Registrations.MultipleRegistration`2"/>
</summary>
</member>
<member name="M:LightweightIocContainer.Registrations.MultipleRegistration`2.WithParameters(System.Object[])">
<summary>
Pass parameters that will be used to <see cref="M:LightweightIocContainer.IocContainer.Resolve``1"/> an instance of this <see cref="P:LightweightIocContainer.Interfaces.Registrations.IRegistration.InterfaceType"/>
<para>Parameters set with this method are always inserted at the beginning of the argument list if more parameters are given when resolving</para>
</summary>
<param name="parameters">The parameters</param>
<returns>The current instance of this <see cref="T:LightweightIocContainer.Interfaces.Registrations.IRegistration"/></returns>
<exception cref="T:LightweightIocContainer.Exceptions.InvalidRegistrationException"><see cref="P:LightweightIocContainer.Registrations.RegistrationBase.Parameters"/> are already set or no parameters given</exception>
</member>
<member name="M:LightweightIocContainer.Registrations.MultipleRegistration`2.WithParameters(System.ValueTuple{System.Int32,System.Object}[])">
<summary>
Pass parameters that will be used to<see cref="M:LightweightIocContainer.IocContainer.Resolve``1"/> an instance of this <see cref="P:LightweightIocContainer.Interfaces.Registrations.IRegistration.InterfaceType"/>
<para>Parameters set with this method are inserted at the position in the argument list that is passed with the parameter if more parameters are given when resolving</para>
</summary>
<param name="parameters">The parameters with their position</param>
<returns>The current instance of this <see cref="T:LightweightIocContainer.Interfaces.Registrations.IRegistration"/></returns>
<exception cref="T:LightweightIocContainer.Exceptions.InvalidRegistrationException"><see cref="P:LightweightIocContainer.Registrations.RegistrationBase.Parameters"/> are already set or no parameters given</exception>
</member>
<member name="M:LightweightIocContainer.Registrations.MultipleRegistration`2.WithDisposeStrategy(LightweightIocContainer.DisposeStrategy)">
<summary>
Add a <see cref="T:LightweightIocContainer.DisposeStrategy"/> for the <see cref="T:LightweightIocContainer.Interfaces.Registrations.IRegistrationBase"/>
</summary>
<param name="disposeStrategy">The <see cref="T:LightweightIocContainer.DisposeStrategy"/></param>
<returns>The current instance of this <see cref="T:LightweightIocContainer.Registrations.RegistrationBase"/></returns>
</member>
<member name="T:LightweightIocContainer.Registrations.MultipleRegistration`3">
<summary>
An <see cref="T:LightweightIocContainer.Interfaces.Registrations.IRegistration"/> to register multiple interfaces for on implementation type

@ -2,8 +2,10 @@
// Created: 2019-12-07
// Copyright(c) 2019 SimonG. All Rights Reserved.
using LightweightIocContainer.Exceptions;
using LightweightIocContainer.Interfaces;
using LightweightIocContainer.Interfaces.Registrations;
using LightweightIocContainer.Interfaces.Registrations.Fluent;
namespace LightweightIocContainer.Registrations;
@ -31,6 +33,49 @@ internal abstract class MultipleRegistration<TInterface1, TImplementation> : Typ
/// A <see cref="List{T}"/> of <see cref="IRegistration"/>s that are registered within this <see cref="MultipleRegistration{TInterface1,TInterface2}"/>
/// </summary>
public List<IRegistration> Registrations { get; protected init; } = [];
/// <summary>
/// Pass parameters that will be used to <see cref="IocContainer.Resolve{T}()"/> an instance of this <see cref="IRegistration.InterfaceType"/>
/// <para>Parameters set with this method are always inserted at the beginning of the argument list if more parameters are given when resolving</para>
/// </summary>
/// <param name="parameters">The parameters</param>
/// <returns>The current instance of this <see cref="IRegistration"/></returns>
/// <exception cref="InvalidRegistrationException"><see cref="RegistrationBase.Parameters"/> are already set or no parameters given</exception>
public override IRegistrationBase WithParameters(params object[] parameters)
{
foreach (IWithParameters registration in Registrations.OfType<IWithParameters>())
registration.WithParameters(parameters);
return this;
}
/// <summary>
/// Pass parameters that will be used to<see cref="IocContainer.Resolve{T}()"/> an instance of this <see cref="IRegistration.InterfaceType"/>
/// <para>Parameters set with this method are inserted at the position in the argument list that is passed with the parameter if more parameters are given when resolving</para>
/// </summary>
/// <param name="parameters">The parameters with their position</param>
/// <returns>The current instance of this <see cref="IRegistration"/></returns>
/// <exception cref="InvalidRegistrationException"><see cref="RegistrationBase.Parameters"/> are already set or no parameters given</exception>
public override IRegistrationBase WithParameters(params (int index, object parameter)[] parameters)
{
foreach (IWithParameters registration in Registrations.OfType<IWithParameters>())
registration.WithParameters(parameters);
return this;
}
/// <summary>
/// Add a <see cref="DisposeStrategy"/> for the <see cref="IRegistrationBase"/>
/// </summary>
/// <param name="disposeStrategy">The <see cref="DisposeStrategy"/></param>
/// <returns>The current instance of this <see cref="RegistrationBase"/></returns>
public override IRegistrationBase WithDisposeStrategy(DisposeStrategy disposeStrategy)
{
foreach (IWithDisposeStrategy registration in Registrations.OfType<IWithDisposeStrategy>())
registration.WithDisposeStrategy(disposeStrategy);
return this;
}
}
/// <summary>

@ -140,7 +140,7 @@ internal abstract class RegistrationBase : IRegistrationBase, IWithFactoryIntern
/// </summary>
/// <param name="disposeStrategy">The <see cref="DisposeStrategy"/></param>
/// <returns>The current instance of this <see cref="RegistrationBase"/></returns>
public IRegistrationBase WithDisposeStrategy(DisposeStrategy disposeStrategy)
public virtual IRegistrationBase WithDisposeStrategy(DisposeStrategy disposeStrategy)
{
DisposeStrategy = disposeStrategy;
return this;

Loading…
Cancel
Save