<?xml version="1.0"?>
<doc>
    <assembly>
        <name>BeatyBit.Armature.Core</name>
    </assembly>
    <members>
        <member name="T:JetBrains.Annotations.UsedImplicitlyAttribute">
             <summary>
             Indicates that the marked symbol is used implicitly (e.g. via reflection, in external library),
             so this symbol will be ignored by usage-checking inspections. <br/>
             You can use <see cref="T:JetBrains.Annotations.ImplicitUseKindFlags"/> and <see cref="T:JetBrains.Annotations.ImplicitUseTargetFlags"/>
             to configure how this attribute is applied.
             </summary>
             <example><code>
             [UsedImplicitly]
             public class TypeConverter {}
            
             public class SummaryData
             {
             [UsedImplicitly(ImplicitUseKindFlags.InstantiatedWithFixedConstructorSignature)]
             public SummaryData() {}
             }
            
             [UsedImplicitly(ImplicitUseTargetFlags.WithInheritors | ImplicitUseTargetFlags.Default)]
             public interface IService {}
             </code></example>
        </member>
        <member name="T:JetBrains.Annotations.MeansImplicitUseAttribute">
            <summary>
            Can be applied to attributes, type parameters, and parameters of a type assignable from <see cref="T:System.Type"/> .
            When applied to an attribute, the decorated attribute behaves the same as <see cref="T:JetBrains.Annotations.UsedImplicitlyAttribute"/>.
            When applied to a type parameter or to a parameter of type <see cref="T:System.Type"/>,
            indicates that the corresponding type is used implicitly.
            </summary>
        </member>
        <member name="T:JetBrains.Annotations.ImplicitUseKindFlags">
            <summary>
            Specifies the details of implicitly used symbol when it is marked
            with <see cref="T:JetBrains.Annotations.MeansImplicitUseAttribute"/> or <see cref="T:JetBrains.Annotations.UsedImplicitlyAttribute"/>.
            </summary>
        </member>
        <member name="F:JetBrains.Annotations.ImplicitUseKindFlags.Access">
            <summary>Only entity marked with attribute considered used.</summary>
        </member>
        <member name="F:JetBrains.Annotations.ImplicitUseKindFlags.Assign">
            <summary>Indicates implicit assignment to a member.</summary>
        </member>
        <member name="F:JetBrains.Annotations.ImplicitUseKindFlags.InstantiatedWithFixedConstructorSignature">
            <summary>
            Indicates implicit instantiation of a type with fixed constructor signature.
            That means any unused constructor parameters won't be reported as such.
            </summary>
        </member>
        <member name="F:JetBrains.Annotations.ImplicitUseKindFlags.InstantiatedNoFixedConstructorSignature">
            <summary>Indicates implicit instantiation of a type.</summary>
        </member>
        <member name="T:JetBrains.Annotations.ImplicitUseTargetFlags">
            <summary>
            Specifies what is considered to be used implicitly when marked
            with <see cref="T:JetBrains.Annotations.MeansImplicitUseAttribute"/> or <see cref="T:JetBrains.Annotations.UsedImplicitlyAttribute"/>.
            </summary>
        </member>
        <member name="F:JetBrains.Annotations.ImplicitUseTargetFlags.Members">
            <summary>Members of the type marked with the attribute are considered used.</summary>
        </member>
        <member name="F:JetBrains.Annotations.ImplicitUseTargetFlags.WithInheritors">
            <summary> Inherited entities are considered used. </summary>
        </member>
        <member name="F:JetBrains.Annotations.ImplicitUseTargetFlags.WithMembers">
            <summary>Entity marked with the attribute and all its members considered used.</summary>
        </member>
        <member name="T:JetBrains.Annotations.PublicAPIAttribute">
            <summary>
            This attribute is intended to mark publicly available API,
            which should not be removed and so is treated as used.
            </summary>
        </member>
        <member name="T:JetBrains.Annotations.InstantHandleAttribute">
            <summary>
            Tells the code analysis engine if the parameter is completely handled when the invoked method is on stack.
            If the parameter is a delegate, indicates that delegate is executed while the method is executed.
            If the parameter is an enumerable, indicates that it is enumerated while the method is executed.
            </summary>
        </member>
        <member name="T:JetBrains.Annotations.StringFormatMethodAttribute">
             <summary>
             Indicates that the marked method builds string by the format pattern and (optional) arguments.
             The parameter, which contains the format string, should be given in the constructor. The format string
             should be in <see cref="M:System.String.Format(System.IFormatProvider,System.String,System.Object[])"/>-like form.
             </summary>
             <example><code>
             [StringFormatMethod("message")]
             void ShowError(string message, params object[] args) { /* do something */ }
            
             void Foo() {
             ShowError("Failed: {0}"); // Warning: Non-existing argument in format string
             }
             </code></example>
        </member>
        <member name="M:JetBrains.Annotations.StringFormatMethodAttribute.#ctor(System.String)">
            <param name="formatParameterName">
            Specifies which parameter of an annotated method should be treated as the format string
            </param>
        </member>
        <member name="T:JetBrains.Annotations.StructuredMessageTemplateAttribute">
             <summary>
             Indicates that the marked parameter is a message template where placeholders are to be replaced by the following arguments
             in the order in which they appear
             </summary>
             <example><code>
             void LogInfo([StructuredMessageTemplate]string message, params object[] args) { /* do something */ }
            
             void Foo() {
             LogInfo("User created: {username}"); // Warning: Non-existing argument in format string
             }
             </code></example>
        </member>
        <member name="T:BeatyBit.Armature.Core.BuildActionBag">
            <summary>
            Collection of build actions grouped by a build stage.
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.BuildActionBagExtension">
            <summary>
            These methods are implemented as extensions instead of class members in order to be able to operation with 'null' BuildActionBag.
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.BuildActionBagExtension.Merge(BeatyBit.Armature.Core.WeightedBuildActionBag,BeatyBit.Armature.Core.WeightedBuildActionBag)">
            <summary>
            Merges two collections into one
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.BuildActionBagExtension.GetTopmostAction(BeatyBit.Armature.Core.WeightedBuildActionBag,System.Object)">
            <summary>
            Returns the build action with biggest matching weight for the build stage.
            </summary>
            <exception cref="T:BeatyBit.Armature.Core.ArmatureException">Throws if there are more than one action with equal matching weight.</exception>
        </member>
        <member name="T:BeatyBit.Armature.Core.IBuildAction">
            <summary>
            Build action. One or more build actions should be performed to build a unit.
            </summary>
            <remarks>
            Building is two-pass process, each build action called twice. <see cref="M:BeatyBit.Armature.Core.IBuildAction.PostProcess(BeatyBit.Armature.Core.IBuildSession)" /> is called in reverse order of <see cref="M:BeatyBit.Armature.Core.IBuildAction.Process(BeatyBit.Armature.Core.IBuildSession)" />
            </remarks>
        </member>
        <member name="M:BeatyBit.Armature.Core.IBuildAction.Process(BeatyBit.Armature.Core.IBuildSession)">
            <summary>
            This method is called first for all matched actions in direct order.
            Once <see cref="P:BeatyBit.Armature.Core.IBuildSession.BuildResult" /> is set by any action, no other matched actions are called.
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.IBuildAction.PostProcess(BeatyBit.Armature.Core.IBuildSession)">
            <summary>
            This method is called when all actions for which <see cref="M:BeatyBit.Armature.Core.IBuildAction.Process(BeatyBit.Armature.Core.IBuildSession)" /> was called are rewind back after the unit is just built.
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.WeightedBuildActionBag">
            <summary>
            Collection of build actions with weight grouped by a build stage.
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.Builder">
            <summary>
            The builder of units. It is the convenient way to couple a build stack pattern tree, (<see cref="T:BeatyBit.Armature.Core.BuildStackPatternTree" />),
            build stages, and parent builders together to pass into a <see cref="T:BeatyBit.Armature.Core.BuildSession" />.
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.Builder.#ctor(System.String,System.Object[])">
            <param name="name">Used in logs an for debugging</param>
            <param name="buildStages">The ordered collection of build stages all of which are performed to build a unit.</param>
        </member>
        <member name="M:BeatyBit.Armature.Core.Builder.#ctor(System.String,System.Object[],BeatyBit.Armature.Core.IBuilder[])">
            <param name="name">Used in logs an for debugging</param>
            <param name="buildStages">The ordered collection of build stages all of which are performed to build a unit.
            See <see cref="M:BeatyBit.Armature.Core.BuildStackPatternExtension.UseBuildAction(BeatyBit.Armature.Core.IBuildStackPattern,BeatyBit.Armature.Core.IBuildAction,System.Object)"/> for details.</param>
            <param name="parentBuilders">
            If unit is not built and <paramref name="parentBuilders" /> are provided, tries to build a unit using
            parent builders one by one in the order they passed into the constructor.
            </param>
        </member>
        <member name="P:BeatyBit.Armature.Core.Builder.Name">
            <summary>
            Used in logs and for debugging.
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.Builder.BuildUnit(BeatyBit.Armature.Core.UnitId,BeatyBit.Armature.Core.IBuildStackPattern)">
            <inheritdoc />
        </member>
        <member name="M:BeatyBit.Armature.Core.Builder.BuildAllUnits(BeatyBit.Armature.Core.UnitId,BeatyBit.Armature.Core.IBuildStackPattern)">
            <inheritdoc />
        </member>
        <member name="T:BeatyBit.Armature.Core.BuildResult">
            <summary>
            A result of building a Unit, null is a valid value of the <see cref="F:BeatyBit.Armature.Core.BuildResult.Value" />.
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.BuildResult.#ctor(System.Object)">
            <summary>
            A result of building a Unit, null is a valid value of the <see cref="F:BeatyBit.Armature.Core.BuildResult.Value" />.
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.BuildSession">
            <summary>
            Represents whole build session of one Unit, all dependency of the being built Unit are built in the context of one build session.
            </summary>
            <remarks>It could be for example IA -> A -> IB -> B -> int. This stack means that for now Unit of type int is the target unit,
            but it is built in the "context" of the whole build stack.</remarks>
        </member>
        <member name="M:BeatyBit.Armature.Core.BuildSession.#ctor(System.Object[],BeatyBit.Armature.Core.IBuildStackPattern,BeatyBit.Armature.Core.IBuildStackPattern,BeatyBit.Armature.Core.IBuilder[])">
            <param name="buildStages">The sequence of build stages. See <see cref="T:BeatyBit.Armature.Core.Builder" /> for details.</param>
            <param name="patternTree">Build stack patterns tree used to find build actions to build a unit.</param>
            <param name="auxPatternTree">Additional build stack patterns tree, in opposite to <paramref name="patternTree"/> these patterns
            are passed to <paramref name="parentBuilders"/> if unit is being tried to build via parent builders.</param>
            <param name="parentBuilders">
            If unit is not built and <paramref name="parentBuilders" /> are provided, tries to build a unit using
            parent builders one by one in the order they passed into the constructor.
            </param>
        </member>
        <member name="M:BeatyBit.Armature.Core.BuildSession.BuildUnit(BeatyBit.Armature.Core.UnitId,System.Boolean)">
            <inheritdoc cref="M:BeatyBit.Armature.Core.IBuildSession.BuildUnit(BeatyBit.Armature.Core.UnitId,System.Boolean)"/>
        </member>
        <member name="M:BeatyBit.Armature.Core.BuildSession.BuildAllUnits(BeatyBit.Armature.Core.UnitId,System.Boolean)">
            <inheritdoc cref="M:BeatyBit.Armature.Core.IBuildSession.BuildAllUnits(BeatyBit.Armature.Core.UnitId,System.Boolean)"/>
        </member>
        <member name="M:BeatyBit.Armature.Core.BuildSession.Build``1(BeatyBit.Armature.Core.UnitId,System.Func{BeatyBit.Armature.Core.BuildSession.Stack,BeatyBit.Armature.Core.WeightedBuildActionBag,``0})">
            <summary>
            Common logic to build one or all units
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.BuildSession.Interface">
            <inheritdoc />
        </member>
        <member name="M:BeatyBit.Armature.Core.BuildSession.Interface.#ctor(BeatyBit.Armature.Core.BuildSession,BeatyBit.Armature.Core.BuildSession.Stack)">
            <inheritdoc />
        </member>
        <member name="P:BeatyBit.Armature.Core.BuildSession.Interface.BuildResult">
            <inheritdoc />
        </member>
        <member name="P:BeatyBit.Armature.Core.BuildSession.Interface.Stack">
            <inheritdoc />
        </member>
        <member name="M:BeatyBit.Armature.Core.BuildSession.Interface.BuildUnit(BeatyBit.Armature.Core.UnitId,System.Boolean)">
            <inheritdoc />
        </member>
        <member name="M:BeatyBit.Armature.Core.BuildSession.Interface.BuildAllUnits(BeatyBit.Armature.Core.UnitId,System.Boolean)">
            <inheritdoc />
        </member>
        <member name="T:BeatyBit.Armature.Core.BuildSession.Stack">
            <summary>
            Represents the "building stack".
            It could be for example IA -> A -> IB -> B -> int. This stack means that for now Unit of type 'int' is the target unit
            but it is built in the "context" of the whole build stack.
            </summary>
        </member>
        <member name="P:BeatyBit.Armature.Core.BuildSession.Stack.TargetUnit">
            <summary>
            The unit to be built
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.BuildSession.Stack.GetTail(System.Int32)">
            <summary>
            Gets the tails of the stack. <see cref="P:BeatyBit.Armature.Core.BuildSession.Stack.TargetUnit"/> remains the same, in opposite to items accessed by <see cref="P:BeatyBit.Armature.Core.BuildSession.Stack.Item(System.Int32)"/>
            </summary>
            <param name="startIndex">The index of the item which should became the very first item of the tail.</param>
        </member>
        <member name="M:BeatyBit.Armature.Core.IBuilder.BuildUnit(BeatyBit.Armature.Core.UnitId,BeatyBit.Armature.Core.IBuildStackPattern)">
            <summary>
            Builds a unit identified by the <paramref name="unitId"/>.
            </summary>
            <param name="unitId">The id of the unit to be built.</param>
            <param name="auxBuildStackPatternTree">Optional tree of build stack patterns which will be used along with
            the permanent one to build a unit or it's dependencies.</param>
            <returns></returns>
        </member>
        <member name="M:BeatyBit.Armature.Core.IBuilder.BuildAllUnits(BeatyBit.Armature.Core.UnitId,BeatyBit.Armature.Core.IBuildStackPattern)">
            <summary>
            Builds all units represented by <see cref="T:BeatyBit.Armature.Core.UnitId" /> by all build actions in spite of matching weight.
            This can be useful to build all implementers of an interface.
            </summary>
            <param name="unitId">The id of the unit to build.</param>
            <param name="auxBuildStackPatternTree">Additional build stack pattern tree containing build actions to build a unit or its dependencies.</param>
            <returns>Returns <see cref="F:BeatyBit.Armature.Core.Sdk.Empty`1.List"/> if no units were built. </returns>
        </member>
        <member name="T:BeatyBit.Armature.Core.IBuildSession">
            <summary>
            This is a limited interface of the <see cref="T:BeatyBit.Armature.Core.BuildSession" /> passed to <see cref="M:BeatyBit.Armature.Core.IBuildAction.Process(BeatyBit.Armature.Core.IBuildSession)" />
            and <see cref="M:BeatyBit.Armature.Core.IBuildAction.PostProcess(BeatyBit.Armature.Core.IBuildSession)" />.
            </summary>
        </member>
        <member name="P:BeatyBit.Armature.Core.IBuildSession.BuildResult">
            <summary>
            The result of building. Build actions can check if the unit is already built, or set the result.
            </summary>
        </member>
        <member name="P:BeatyBit.Armature.Core.IBuildSession.Stack">
            <summary>
            The stack of units representing a build session. See <see cref="T:BeatyBit.Armature.Core.BuildSession.Stack"/> for details.
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.IBuildSession.BuildUnit(BeatyBit.Armature.Core.UnitId,System.Boolean)">
            <summary>
            Builds a unit represented by <see cref="T:BeatyBit.Armature.Core.UnitId" /> in the context of the current build session.
            </summary>
            <param name="unitId">"Id" of the unit to build. See <see cref="T:BeatyBit.Armature.Core.IBuildStackPattern" /> for details</param>
            <param name="engageParentBuilders">Determines whether to build a unit via parent builders in case it's not built in the scope of
            the current build session. Default: true. </param>
        </member>
        <member name="M:BeatyBit.Armature.Core.IBuildSession.BuildAllUnits(BeatyBit.Armature.Core.UnitId,System.Boolean)">
            <summary>
            Builds all units represented by <see cref="T:BeatyBit.Armature.Core.UnitId" /> with all build actions in spite of the weight.
            This can be useful to build all implementers of an interface.
            </summary>
            <param name="unitId">"Id" of the unit to build. See <see cref="T:BeatyBit.Armature.Core.IBuildStackPattern" /> for details</param>
            <param name="engageParentBuilders">If true <see cref="M:BeatyBit.Armature.Core.Builder.BuildAllUnits(BeatyBit.Armature.Core.UnitId,BeatyBit.Armature.Core.IBuildStackPattern)"/> is called for whole parent builders graph,
            if false build unit only in the scope of the current build sesstion. Default: true.</param>
            <returns>Returns an empty list if no units were built.</returns>
        </member>
        <member name="T:BeatyBit.Armature.Core.BuildStackPatternBase">
            <summary>
            Base class implementing <see cref="M:BeatyBit.Armature.Core.IBuildStackPattern.AddBuildAction(BeatyBit.Armature.Core.IBuildAction,System.Object)"/>
            </summary>
        </member>
        <member name="P:BeatyBit.Armature.Core.BuildStackPatternBase.Children">
            <summary>
            The collection of all children nodes used to find existing one, add new, or replace one with another.
            All nodes with their children are a build stack pattern tree.
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.BuildStackPatternBase.GetOrAddNode``1(``0)">
            <summary>
            Adds a <paramref name="node" /> as a child node if the node is not already added. Returns the new node, or the existing node if the node already added.
            </summary>
            <remarks>Call it first and then fill returned <see cref="T:BeatyBit.Armature.Core.IBuildStackPattern" /> with build actions or perform other needed actions due to
            it can return other instance of <see cref="T:BeatyBit.Armature.Core.IBuildStackPattern"/> then passed <paramref name="node"/>.</remarks>
        </member>
        <member name="M:BeatyBit.Armature.Core.BuildStackPatternBase.GetChildrenActions(BeatyBit.Armature.Core.BuildSession.Stack,System.Int64,BeatyBit.Armature.Core.WeightedBuildActionBag@)">
            <summary>
            Gathers and merges build actions from all children nodes.
            </summary>
            <param name="stack">The build stack to pass to children nodes if any.</param>
            <param name="inputWeight">The weight of matching which passed to children to calculate a final weight of matching.</param>
            <param name="actionBag"></param>
        </member>
        <member name="T:BeatyBit.Armature.Core.BuildStackPatternByUnitBase">
            <summary>
            Base class for build stack patterns using <see cref="T:BeatyBit.Armature.Core.IUnitPattern"/> to match the passed <see cref="T:BeatyBit.Armature.Core.UnitId"/>.
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.BuildStackPatternExtension.UseBuildAction(BeatyBit.Armature.Core.IBuildStackPattern,BeatyBit.Armature.Core.IBuildAction,System.Object)">
            <inheritdoc cref="M:BeatyBit.Armature.Core.IBuildStackPattern.AddBuildAction(BeatyBit.Armature.Core.IBuildAction,System.Object)"/>
            <returns>Returns 'this' in order to use fluent syntax</returns>
        </member>
        <member name="T:BeatyBit.Armature.Core.BuildStackPatternTree">
            <summary>
            The root node of the tree of <see cref="T:BeatyBit.Armature.Core.IBuildStackPattern"/> nodes.
            </summary>
            <remarks>
            This class implements <see cref="T:System.Collections.IEnumerable" /> and has <see cref="M:BeatyBit.Armature.Core.BuildStackPatternTree.Add(BeatyBit.Armature.Core.IBuildStackPattern)" /> method in order to make possible compact and readable initialization like
            new BuildStackPatternTree(...)
            {
               new IfFirstUnit(new IsConstructor())
                 .UseBuildAction(new GetConstructorWithMaxParametersCount(), BuildStage.Create),
               new IfFirstUnit(new IsParameterInfoList())
                 .UseBuildAction(new BuildMethodArgumentsInDirectOrder(), BuildStage.Create),
               new IfFirstUnit(new IsParameterInfo())
                 .UseBuildAction(new BuildArgumentByParameterType(), BuildStage.Create)
            };
            </remarks>
        </member>
        <member name="M:BeatyBit.Armature.Core.BuildStackPatternTree.GatherBuildActions(BeatyBit.Armature.Core.BuildSession.Stack,BeatyBit.Armature.Core.WeightedBuildActionBag@,System.Int64)">
            <inheritdoc />
        </member>
        <member name="M:BeatyBit.Armature.Core.BuildStackPatternTree.PrintToLog(BeatyBit.Armature.Core.LogLevel)">
            <inheritdoc />
        </member>
        <member name="T:BeatyBit.Armature.Core.BuildStackPatternTree.Root">
            <summary>
            Reuse implementation of <see cref="T:BeatyBit.Armature.Core.BuildStackPatternBase" /> to implement <see cref="T:BeatyBit.Armature.Core.BuildStackPatternTree" /> public interface.
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.IBuildStackPattern">
            <summary>
            A pattern used to match a unit or their combination in the build stack. See <see cref="T:BeatyBit.Armature.Core.BuildSession.Stack"/> for details.
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.IBuildStackPattern.GetOrAddNode``1(``0)">
            <summary>
            Adds a <paramref name="node" /> as a child node if the node is not already added. Returns the new node, or the existing node if the node already added.
            </summary>
            <remarks>Call it first and then fill returned <see cref="T:BeatyBit.Armature.Core.IBuildStackPattern" /> with build actions or perform other needed actions due to
            it can return other instance of <see cref="T:BeatyBit.Armature.Core.IBuildStackPattern"/> then passed <paramref name="node"/>.</remarks>
        </member>
        <member name="M:BeatyBit.Armature.Core.IBuildStackPattern.AddNode``1(``0)">
            <summary>
            Adds the <paramref name="node" /> as a child node.
            </summary>
            <exception cref="T:BeatyBit.Armature.Core.ArmatureException">A node is already in the tree.</exception>
        </member>
        <member name="M:BeatyBit.Armature.Core.IBuildStackPattern.AddBuildAction(BeatyBit.Armature.Core.IBuildAction,System.Object)">
            <summary>
            Adds a <see cref="T:BeatyBit.Armature.Core.IBuildAction" /> which will be called to build a Target Unit matched by the branch of the build stack pattern tree represented
            by this node with its parents.
            </summary>
            <param name="buildAction">A build action.</param>
            <param name="buildStage">A build stage in which the build action is executed.</param>
            <returns>Returns true if build action was added, false if the equal build action is already in the collection.</returns>
        </member>
        <member name="M:BeatyBit.Armature.Core.IBuildStackPattern.GatherBuildActions(BeatyBit.Armature.Core.BuildSession.Stack,BeatyBit.Armature.Core.WeightedBuildActionBag@,System.Int64)">
            <summary>
            Returns build actions which should be performed to build a <see cref="P:BeatyBit.Armature.Core.BuildSession.Stack.TargetUnit"/>.
            </summary>
            <param name="stack">
            The stack of units representing a build session. Each unit is the dependency of the "deeper" in the stack one.
            </param>
            <param name="actionBag"></param>
            <param name="inputWeight">
              The weight of matching which used by children matchers to calculate a final weight of matching
            </param>
            <remarks>
            IA -> A -> IB -> B. This stack means that for now Unit of type 'B' is the target unit
            but it is built in the "context" of the whole build stack.
            </remarks>
            <returns>
            Returns all matched build actions for the <paramref name="stack" />. All actions are grouped by a building stage
            and coupled with a "weight of matching". See <see cref="T:BeatyBit.Armature.Core.WeightedBuildActionBag" /> for details.
            </returns>
        </member>
        <member name="T:BeatyBit.Armature.Core.IfFirstUnit">
            <summary>
            Checks if the first unit in the build stack matches the specified pattern.
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.IfFirstUnit.GatherBuildActions(BeatyBit.Armature.Core.BuildSession.Stack,BeatyBit.Armature.Core.WeightedBuildActionBag@,System.Int64)">
            <summary>
            Checks if the first unit in the build stack matches the specified patter.
            If it is the target unit, returns build actions for it, if no, pass the rest of the build stack to each child and returns all actions from children merged
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.SkipTillUnit">
            <summary>
            Moves along the build stack skipping units until it encounters a matching unit. Behaves like string search with wildcard.
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.SkipTillUnit.GatherBuildActions(BeatyBit.Armature.Core.BuildSession.Stack,BeatyBit.Armature.Core.WeightedBuildActionBag@,System.Int64)">
            <summary>
            Moves along the build stack skipping units until it finds the matching unit.
            If it is the target unit, returns build actions for it, if no, pass the rest of the stack to each child and returns merged actions.
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.SkipWhileUnit">
            <summary>
            Skips units from the build stack while unit matches specified pattern till the target unit. The target unit is never skipped.
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.WeightOf">
            <summary>
            Inherit this class to extend enum pattern with custom weights or want to re-balance the weighting system.
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.WeightOf.BuildStackPattern">
             <summary>
             Note that <see cref="P:BeatyBit.Armature.Core.WeightOf.BuildStackPattern.SkipTillUnit"/> and <see cref="P:BeatyBit.Armature.Core.WeightOf.BuildStackPattern.SkipWhileUnit"/> are multipliers, see the implementation of method
             <see cref="T:BeatyBit.Armature.Core.IBuildStackPattern"/>.<see cref="M:BeatyBit.Armature.Core.IBuildStackPattern.GatherBuildActions(BeatyBit.Armature.Core.BuildSession.Stack,BeatyBit.Armature.Core.WeightedBuildActionBag@,System.Int64)"/> in classes <see cref="T:BeatyBit.Armature.Core.SkipTillUnit"/> and
             <see cref="T:BeatyBit.Armature.Core.SkipWhileUnit"/>, whereas <see cref="P:BeatyBit.Armature.Core.WeightOf.BuildStackPattern.IfFirstUnit"/> is an absolute value.
            
             Make sure that <see cref="P:BeatyBit.Armature.Core.WeightOf.BuildStackPattern.SkipTillUnit"/> and <see cref="P:BeatyBit.Armature.Core.WeightOf.BuildStackPattern.SkipWhileUnit"/> will never "win" <see cref="P:BeatyBit.Armature.Core.WeightOf.BuildStackPattern.IfFirstUnit"/> when change their values.
             </summary>
        </member>
        <member name="P:BeatyBit.Armature.Core.WeightOf.BuildStackPattern.IfFirstUnit">
             Weights of <see cref="P:BeatyBit.Armature.Core.WeightOf.BuildStackPattern.IfFirstUnit"/> is about two orders of magnitude higher than weights of <see cref="T:BeatyBit.Armature.Core.UnitPattern"/> in order to registrations like
            
             builder.GetOrAddNode(new IfFirstUnit(Unit.Of(typeof(string)), WeightOf.InjectionPoint.ByType))
                    .GetOrAddNode(new SkipTillUnit(new Unit.Of(typeof(ChildType)), WeightOf.UnitPattern.ExactTypePattern))
            
             never "wins"
            
             builder.GetOrAddNode(new IfFirstUnit(Unit.Of(typeof(string)), WeightOf.InjectionPoint.ByName))
                    .GetOrAddNode(new IfFirstUnit(new IsInheritorOf(typeof(BaseType)), WeightOf.UnitPattern.SubtypePattern))
            
             because the first one is registration for building "in context" of ChildType whereas the second one is "personal" registration of
             all inheritors of BaseType
        </member>
        <member name="T:BeatyBit.Armature.Core.ArmatureException">
            <summary>
            Exception is used to distinguish internal unexpected situations and error produced by user code
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.LeanList`1">
            <summary>
            A list which doesn't allocate inner array if contains less than five items
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.ILogString">
            <summary>
            Represents an object as a text ready to be logged.
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.ILoggable">
            <summary>
            An object is able to print its content to the log not as a part of runtime logging but as an entity with content.
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.Log">
            <summary>
            Class is used to log Armature activities in human friendly form in HOCON format. Writes data into <see cref="T:System.Diagnostics.Trace" />,
            so add a listener to see the log.
            </summary>
        </member>
        <member name="F:BeatyBit.Armature.Core.Log.LogFullTypeName">
            <summary>
            Set should full type name be logged or only short name w/o namespace to simplify reading.
            </summary>
        </member>
        <member name="P:BeatyBit.Armature.Core.Log.IndentSize">
            <summary>
            The count of spaces used for indentation
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.Log.IsEnabled(BeatyBit.Armature.Core.LogLevel)">
            <summary>
            Can be used instead of passing lambda into <see cref="M:BeatyBit.Armature.Core.Log.WriteLine(BeatyBit.Armature.Core.LogLevel,System.Func{System.String})"/> if logging is placed on a critical path
            and even creating of a lambda and even more so a closure is not an option.
            </summary>
            <remarks>See usages in Armature itself for details.</remarks>
        </member>
        <member name="M:BeatyBit.Armature.Core.Log.Enable(BeatyBit.Armature.Core.LogLevel)">
            <summary>
            Enables logging, disposing returned object revert Log to the previous state
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.Log.Disable">
            <summary>
            Disables logging, disposing returned object revert Log to the previous state
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.Log.WriteLine(BeatyBit.Armature.Core.LogLevel,System.Func{System.String})">
            <summary>
            This method calls <paramref name="getText"/> only if Logging is enabled for <paramref name="logLevel"/>,
            use if calculating arguments for logging takes a time.
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.Log.IndentBlock(BeatyBit.Armature.Core.LogLevel,System.String,System.String,System.Int32,System.Boolean)">
            <summary>
            Makes indented "block" of log data.
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.Log.NamedBlock(BeatyBit.Armature.Core.LogLevel,System.String,System.Boolean)">
            <summary>
            Makes named and indented "block" of log data
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.Log.NamedBlock(BeatyBit.Armature.Core.LogLevel,System.Func{System.String})">
            <summary>
            Makes a named and indented "block" of log data
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.Log.Execute(BeatyBit.Armature.Core.LogLevel,System.Action)">
            <summary>
            Executes action if <paramref name="logLevel"/> satisfies current Log level. See <see cref="M:BeatyBit.Armature.Core.Log.Enable(BeatyBit.Armature.Core.LogLevel)"/> for details.
            Use it if there are complex computations to prepare log data to avoid performing them if the <see cref="T:BeatyBit.Armature.Core.LogLevel"/> is less than needed.
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.Log.UnderCondition(BeatyBit.Armature.Core.LogLevel)">
             <summary>
             If the current <see cref="T:BeatyBit.Armature.Core.Log"/> <see cref="T:BeatyBit.Armature.Core.LogLevel"/> is less then passed <paramref name="conditionLogLevel"/>
             Log doesn't enter into the conditional mode, because all records with <see cref="T:BeatyBit.Armature.Core.LogLevel"/> bigger then currently active will be ignored.
            
             If the current <see cref="T:BeatyBit.Armature.Core.Log"/> <see cref="T:BeatyBit.Armature.Core.LogLevel"/> is bigger then passed <paramref name="conditionLogLevel"/>
             Log doesn't enter into the conditional mode, because all records with <see cref="T:BeatyBit.Armature.Core.LogLevel"/> less then currently active will be written anyway.
            
             If the current <see cref="T:BeatyBit.Armature.Core.Log"/> <see cref="T:BeatyBit.Armature.Core.LogLevel"/> is equal to passed <paramref name="conditionLogLevel"/> all records to the log will be
             preserved till returned object is disposed, then records with <see cref="T:BeatyBit.Armature.Core.LogLevel"/> equal to the current <see cref="T:BeatyBit.Armature.Core.Log"/>
             <see cref="T:BeatyBit.Armature.Core.LogLevel"/> will be written only if <see cref="T:BeatyBit.Armature.Core.Log.Condition"/>.<see cref="P:BeatyBit.Armature.Core.Log.Condition.IsMet"/> set to true.
             </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.LogExtension.ToLogString(System.Type)">
            <summary>
            Returns the name of <paramref name="type" /> respecting <see cref="F:BeatyBit.Armature.Core.Log.LogFullTypeName" /> property
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.LogExtension.ToHoconString(System.Object)">
            <summary>
            Returns log representation of object, some objects logs in more friendly form then common <see cref="M:System.Object.ToString" /> returns
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.Sdk.IInternal`1">
            <summary>
            This interface provides access to the internal fields in the generic form for the sake of possible extensibility by the end user.
            See implementation for details.
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.Sdk.IInternal`2">
            <inheritdoc />
        </member>
        <member name="T:BeatyBit.Armature.Core.Sdk.IInternal`3">
            <inheritdoc />
        </member>
        <member name="T:BeatyBit.Armature.Core.Sdk.Static">
            <summary>
            Generic approach of creating singleton instances of a type when needed.
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.Sdk.Weighted`1">
            <summary>
            Couples an entity with a weight.
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.IUnitPattern">
            <summary>
            Represents a pattern used to match with the unit id in order to gather a set of <see cref="T:BeatyBit.Armature.Core.IBuildAction"/> needed to build a unit.
            </summary>
            <remarks>
            Unlike <see cref="T:BeatyBit.Armature.Core.IBuildStackPattern" /> which works on a build stack at whole, this pattern is used to match a single Unit.
            </remarks>
        </member>
        <member name="M:BeatyBit.Armature.Core.IUnitPattern.Matches(BeatyBit.Armature.Core.UnitId)">
            <summary> Checks if passed <paramref name="unitId"/> matches the pattern.</summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.Tag">
            <remarks>
            No equality member are needed for this class, <see cref="F:BeatyBit.Armature.Core.Tag._name" /> is used only for debug purpose, these tags should be equal by the reference.
            </remarks>
        </member>
        <member name="F:BeatyBit.Armature.Core.Tag.Any">
            <summary>
            Means "any tag", it is used in patterns to match a unit regardless a tag.
            </summary>
        </member>
        <member name="F:BeatyBit.Armature.Core.Tag.Propagate">
            <summary>
            Is used to propagate a tag during building dependencies.
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.UnitId">
            <summary>
            An Id of the Unit to be built.
            </summary>
        </member>
        <member name="F:BeatyBit.Armature.Core.UnitId.Kind">
            <summary>
            The part of an <see cref="T:BeatyBit.Armature.Core.UnitId"/>. It could be any object e.g. a <see cref="T:System.Type"/>, or a string constant.
            Whatever you find suitable to identify a Unit during tuning up the build process. See <see cref="T:BeatyBit.Armature.Core.IUnitPattern"/> and its implementations for details.
            </summary>
        </member>
        <member name="F:BeatyBit.Armature.Core.UnitId.Tag">
            <summary>
            The part of an <see cref="T:BeatyBit.Armature.Core.UnitId"/>. Two Units of the same <see cref="F:BeatyBit.Armature.Core.UnitId.Kind"/> but with different <see cref="F:BeatyBit.Armature.Core.UnitId.Tag"/> are different Units and could be
            built in different ways. It allows distinguishing e.g. two implementations of the same interface, etc.
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.Unit">
            <summary>
            Syntax sugar for increasing code readability. 'Unit.Of(' looks cleaner than 'new UnitId('
            </summary>
        </member>
        <member name="T:BeatyBit.Armature.Core.UnitPattern">
            <summary>
            Checks if a unit matches with the specified kind and a tag.
            </summary>
        </member>
        <member name="M:BeatyBit.Armature.Core.UnitPattern.Matches(BeatyBit.Armature.Core.UnitId)">
            <inheritdoc />
        </member>
        <member name="M:BeatyBit.Armature.Core.UnitTagExtension.Matches(System.Object,System.Object)">
            <summary>
            Checks if a <paramref name="patternTag"/> tag matches <paramref name="unitTag"/>, returns true if they are equal or the
            <paramref name="patternTag"/> is <see cref="F:BeatyBit.Armature.Core.Tag.Any"/>.
            </summary>
        </member>
    </members>
</doc>
