docs.unity3d.com
    Show / Hide Table of Contents

    Class Unit<TFlowGraph>

    Inheritance
    Object
    GraphElement<TFlowGraph>
    Unit<TFlowGraph>
    FlowFunctionEntry
    FlowFunctionExit
    FlowMacroInput
    FlowMacroOutput
    LegacyFlowGraphInput
    LegacyFlowGraphOutput
    Unit
    Inherited Members
    GraphElement<TFlowGraph>.guid
    GraphElement<TFlowGraph>.modules
    GraphElement<TFlowGraph>.IGraphChild.associatedElement
    GraphElement<TFlowGraph>.requiresInstantiation
    GraphElement<TFlowGraph>.Instantiate(GraphReference)
    GraphElement<TFlowGraph>.Uninstantiate(GraphReference)
    GraphElement<TFlowGraph>.INotifiedCollectionChild<IGraph>.BeforeAdd(IGraph)
    GraphElement<TFlowGraph>.INotifiedCollectionChild<IGraph>.AfterAdd(IGraph)
    GraphElement<TFlowGraph>.INotifiedCollectionChild<IGraph>.BeforeRemove(IGraph)
    GraphElement<TFlowGraph>.INotifiedCollectionChild<IGraph>.AfterRemove(IGraph)
    GraphElement<TFlowGraph>.BeforeAdd(TFlowGraph)
    GraphElement<TFlowGraph>.AfterRemove(TFlowGraph)
    GraphElement<TFlowGraph>.dependencyOrder
    GraphElement<TFlowGraph>.HandleDependencies()
    GraphElement<TFlowGraph>.parentGraph
    GraphElement<TFlowGraph>.ICollectionChild<IGraph>.parent
    GraphElement<TFlowGraph>.IGraphChild.parentGraph
    GraphElement<TFlowGraph>.deserializationDependencies
    GraphElement<TFlowGraph>.Prewarm()
    GraphElement<TFlowGraph>.IsDisposed
    GraphElement<TFlowGraph>.ToString()
    GraphElement<TFlowGraph>.PropertyChanged
    GraphElement<TFlowGraph>.OnPropertyChanged(Object, PropertyChangedEventArgs)
    GraphElement<TFlowGraph>.OnPropertyChanged(String)
    Namespace: Ludiq.Bolt
    Syntax
    public abstract class Unit<TFlowGraph> : GraphElement<TFlowGraph>, IUnit, IGraphElementWithDebugData, IGraphElement, IGraphChild, IObservableDisposable, IDisposable, INotifiedCollectionChild<IGraph>, ICollectionChild<IGraph>, IPrewarmable, IIdentifiable, INotifyPropertyChanged, ISerializationCallbackReceiver where TFlowGraph : FlowGraph
    Type Parameters
    Name Description
    TFlowGraph

    Constructors

    Unit()

    Declaration
    protected Unit()

    Properties

    canDefine

    Declaration
    [DoNotSerialize]
    public virtual bool canDefine { get; }
    Property Value
    Type Description
    Boolean
    Implements
    IUnit.canDefine

    connections

    Declaration
    [DoNotSerialize]
    public IEnumerable<IUnitConnection> connections { get; }
    Property Value
    Type Description
    IEnumerable<IUnitConnection>
    Implements
    IUnit.connections

    controlInputs

    Declaration
    [DoNotSerialize]
    public UnitPortCollection<ControlInput> controlInputs { get; }
    Property Value
    Type Description
    UnitPortCollection<ControlInput>
    Implements
    IUnit.controlInputs

    controlInputsData

    Declaration
    [Serialize]
    public Dictionary<string, ControlInputData> controlInputsData { get; }
    Property Value
    Type Description
    Dictionary<String, ControlInputData>

    controlOutputs

    Declaration
    [DoNotSerialize]
    public UnitPortCollection<ControlOutput> controlOutputs { get; }
    Property Value
    Type Description
    UnitPortCollection<ControlOutput>
    Implements
    IUnit.controlOutputs

    controlOutputsData

    Declaration
    [Serialize]
    public Dictionary<string, ControlOutputData> controlOutputsData { get; }
    Property Value
    Type Description
    Dictionary<String, ControlOutputData>

    definitionException

    Declaration
    [DoNotSerialize]
    public Exception definitionException { get; protected set; }
    Property Value
    Type Description
    Exception
    Implements
    IUnit.definitionException

    failedToDefine

    Declaration
    [DoNotSerialize]
    public bool failedToDefine { get; }
    Property Value
    Type Description
    Boolean
    Implements
    IUnit.failedToDefine

    inputs

    Declaration
    [DoNotSerialize]
    public UnitPortMergedCollection<IUnitInputPort> inputs { get; }
    Property Value
    Type Description
    UnitPortMergedCollection<IUnitInputPort>
    Implements
    IUnit.inputs

    invalidInputs

    Declaration
    [DoNotSerialize]
    public UnitPortCollection<InvalidInput> invalidInputs { get; }
    Property Value
    Type Description
    UnitPortCollection<InvalidInput>
    Implements
    IUnit.invalidInputs

    invalidOutputs

    Declaration
    [DoNotSerialize]
    public UnitPortCollection<InvalidOutput> invalidOutputs { get; }
    Property Value
    Type Description
    UnitPortCollection<InvalidOutput>
    Implements
    IUnit.invalidOutputs

    invalidPorts

    Declaration
    [DoNotSerialize]
    public UnitPortMergedCollection<IUnitPort> invalidPorts { get; }
    Property Value
    Type Description
    UnitPortMergedCollection<IUnitPort>
    Implements
    IUnit.invalidPorts

    isDefined

    Declaration
    [DoNotSerialize]
    public bool isDefined { get; }
    Property Value
    Type Description
    Boolean
    Implements
    IUnit.isDefined

    outputs

    Declaration
    [DoNotSerialize]
    public UnitPortMergedCollection<IUnitOutputPort> outputs { get; }
    Property Value
    Type Description
    UnitPortMergedCollection<IUnitOutputPort>
    Implements
    IUnit.outputs

    ports

    Declaration
    [DoNotSerialize]
    public UnitPortMergedCollection<IUnitPort> ports { get; }
    Property Value
    Type Description
    UnitPortMergedCollection<IUnitPort>
    Implements
    IUnit.ports

    position

    Declaration
    [Serialize]
    public Vector2 position { get; set; }
    Property Value
    Type Description
    Vector2
    Implements
    IUnit.position

    relations

    Declaration
    [DoNotSerialize]
    public IConnectionCollection<IUnitRelation, IUnitPort, IUnitPort> relations { get; }
    Property Value
    Type Description
    IConnectionCollection<IUnitRelation, IUnitPort, IUnitPort>
    Implements
    IUnit.relations

    validInputs

    Declaration
    [DoNotSerialize]
    public UnitPortMergedCollection<IUnitInputPort> validInputs { get; }
    Property Value
    Type Description
    UnitPortMergedCollection<IUnitInputPort>
    Implements
    IUnit.validInputs

    validOutputs

    Declaration
    [DoNotSerialize]
    public UnitPortMergedCollection<IUnitOutputPort> validOutputs { get; }
    Property Value
    Type Description
    UnitPortMergedCollection<IUnitOutputPort>
    Implements
    IUnit.validOutputs

    validPorts

    Declaration
    [DoNotSerialize]
    public UnitPortMergedCollection<IUnitPort> validPorts { get; }
    Property Value
    Type Description
    UnitPortMergedCollection<IUnitPort>
    Implements
    IUnit.validPorts

    valueInputs

    Declaration
    [DoNotSerialize]
    public UnitPortCollection<ValueInput> valueInputs { get; }
    Property Value
    Type Description
    UnitPortCollection<ValueInput>
    Implements
    IUnit.valueInputs

    valueInputsData

    Declaration
    [Serialize]
    public Dictionary<string, ValueInputData> valueInputsData { get; }
    Property Value
    Type Description
    Dictionary<String, ValueInputData>

    valueOutputs

    Declaration
    [DoNotSerialize]
    public UnitPortCollection<ValueOutput> valueOutputs { get; }
    Property Value
    Type Description
    UnitPortCollection<ValueOutput>
    Implements
    IUnit.valueOutputs

    valueOutputsData

    Declaration
    [Serialize]
    public Dictionary<string, ValueOutputData> valueOutputsData { get; }
    Property Value
    Type Description
    Dictionary<String, ValueOutputData>

    Methods

    AfterAdd(TFlowGraph)

    Declaration
    protected override void AfterAdd(TFlowGraph graph)
    Parameters
    Type Name Description
    TFlowGraph graph
    Overrides
    Ludiq.Bolt.GraphElement<TFlowGraph>.AfterAdd(TFlowGraph)

    AfterDefine()

    Declaration
    protected virtual void AfterDefine()

    Assignment(ControlInput, ValueOutput)

    Triggering the source may assign the destination value on the flow.

    Declaration
    protected void Assignment(ControlInput source, ValueOutput destination)
    Parameters
    Type Name Description
    ControlInput source
    ValueOutput destination

    Assignment(ValueOutput, ValueOutput)

    Getting the value of the source may assign the value of the destination.

    Declaration
    protected void Assignment(ValueOutput source, ValueOutput destination)
    Parameters
    Type Name Description
    ValueOutput source
    ValueOutput destination

    BeforeRemove(TFlowGraph)

    Declaration
    protected override void BeforeRemove(TFlowGraph graph)
    Parameters
    Type Name Description
    TFlowGraph graph
    Overrides
    Ludiq.Bolt.GraphElement<TFlowGraph>.BeforeRemove(TFlowGraph)

    BeforeUndefine()

    Declaration
    protected virtual void BeforeUndefine()

    ControlInput(ControlInputDefinition, Func<Flow, ControlOutput>, Func<Flow, IEnumerator>)

    Declaration
    protected ControlInput ControlInput(ControlInputDefinition definition, Func<Flow, ControlOutput> action, Func<Flow, IEnumerator> coroutineAction)
    Parameters
    Type Name Description
    ControlInputDefinition definition
    Func<Flow, ControlOutput> action
    Func<Flow, IEnumerator> coroutineAction
    Returns
    Type Description
    ControlInput

    ControlInput(String, Func<Flow, ControlOutput>)

    Declaration
    protected ControlInput ControlInput(string key, Func<Flow, ControlOutput> action)
    Parameters
    Type Name Description
    String key
    Func<Flow, ControlOutput> action
    Returns
    Type Description
    ControlInput

    ControlInputCoroutine(String, Func<Flow, ControlOutput>, Func<Flow, IEnumerator>)

    Declaration
    protected ControlInput ControlInputCoroutine(string key, Func<Flow, ControlOutput> action, Func<Flow, IEnumerator> coroutineAction)
    Parameters
    Type Name Description
    String key
    Func<Flow, ControlOutput> action
    Func<Flow, IEnumerator> coroutineAction
    Returns
    Type Description
    ControlInput

    ControlInputCoroutine(String, Func<Flow, IEnumerator>)

    Declaration
    protected ControlInput ControlInputCoroutine(string key, Func<Flow, IEnumerator> coroutineAction)
    Parameters
    Type Name Description
    String key
    Func<Flow, IEnumerator> coroutineAction
    Returns
    Type Description
    ControlInput

    ControlOutput(ControlOutputDefinition)

    Declaration
    protected ControlOutput ControlOutput(ControlOutputDefinition definition)
    Parameters
    Type Name Description
    ControlOutputDefinition definition
    Returns
    Type Description
    ControlOutput

    ControlOutput(String)

    Declaration
    protected ControlOutput ControlOutput(string key)
    Parameters
    Type Name Description
    String key
    Returns
    Type Description
    ControlOutput

    CreateDebugData()

    Declaration
    public virtual IGraphElementDebugData CreateDebugData()
    Returns
    Type Description
    IGraphElementDebugData
    Implements
    IGraphElementWithDebugData.CreateDebugData()

    Define()

    Declaration
    public void Define()
    Implements
    IUnit.Define()

    Definition()

    Declaration
    protected abstract void Definition()

    Delegation(ValueOutput, ControlOutput)

    Invoking the value of the source may trigger the destination.

    Declaration
    protected void Delegation(ValueOutput source, ControlOutput destination)
    Parameters
    Type Name Description
    ValueOutput source
    ControlOutput destination

    Disconnect()

    Declaration
    public void Disconnect()

    Dispose()

    Declaration
    public override void Dispose()
    Overrides
    Ludiq.Bolt.GraphElement<TFlowGraph>.Dispose()

    EnsureDefined()

    Declaration
    public void EnsureDefined()
    Implements
    IUnit.EnsureDefined()

    OnAfterDeserialize()

    Declaration
    public void OnAfterDeserialize()

    OnBeforeSerialize()

    Declaration
    public void OnBeforeSerialize()

    OnGraphStructureChanged()

    Declaration
    public void OnGraphStructureChanged()
    Implements
    IUnit.OnGraphStructureChanged()

    RemoveUnconnectedInvalidPorts()

    Declaration
    public void RemoveUnconnectedInvalidPorts()
    Implements
    IUnit.RemoveUnconnectedInvalidPorts()

    Requirement(ValueInput, ControlInput)

    Triggering the destination may fetch the source value.

    Declaration
    protected void Requirement(ValueInput source, ControlInput destination)
    Parameters
    Type Name Description
    ValueInput source
    ControlInput destination

    Requirement(ValueInput, ValueOutput)

    Getting the value of the destination may fetch the value of the source.

    Declaration
    protected void Requirement(ValueInput source, ValueOutput destination)
    Parameters
    Type Name Description
    ValueInput source
    ValueOutput destination

    Succession(ControlInput, ControlOutput)

    Triggering the source may trigger the destination.

    Declaration
    protected void Succession(ControlInput source, ControlOutput destination)
    Parameters
    Type Name Description
    ControlInput source
    ControlOutput destination

    Succession(ControlOutput, ControlOutput)

    Triggering the source may trigger the destination.

    Declaration
    protected void Succession(ControlOutput source, ControlOutput destination)
    Parameters
    Type Name Description
    ControlOutput source
    ControlOutput destination

    ValueInput(HybridType, String)

    Declaration
    protected ValueInput ValueInput(HybridType type, string key)
    Parameters
    Type Name Description
    HybridType type
    String key
    Returns
    Type Description
    ValueInput

    ValueInput(ValueInputDefinition)

    Declaration
    protected ValueInput ValueInput(ValueInputDefinition definition)
    Parameters
    Type Name Description
    ValueInputDefinition definition
    Returns
    Type Description
    ValueInput

    ValueInput<T>(String)

    Declaration
    protected ValueInput ValueInput<T>(string key)
    Parameters
    Type Name Description
    String key
    Returns
    Type Description
    ValueInput
    Type Parameters
    Name Description
    T

    ValueInput<T>(String, T)

    Declaration
    protected ValueInput ValueInput<T>(string key, T default)
    Parameters
    Type Name Description
    String key
    T default
    Returns
    Type Description
    ValueInput
    Type Parameters
    Name Description
    T

    ValueOutput(HybridType, String)

    Declaration
    protected ValueOutput ValueOutput(HybridType type, string key)
    Parameters
    Type Name Description
    HybridType type
    String key
    Returns
    Type Description
    ValueOutput

    ValueOutput(HybridType, String, Func<Flow, Object>)

    Declaration
    protected ValueOutput ValueOutput(HybridType type, string key, Func<Flow, object> getValue)
    Parameters
    Type Name Description
    HybridType type
    String key
    Func<Flow, Object> getValue
    Returns
    Type Description
    ValueOutput

    ValueOutput(ValueOutputDefinition)

    Declaration
    protected ValueOutput ValueOutput(ValueOutputDefinition definition)
    Parameters
    Type Name Description
    ValueOutputDefinition definition
    Returns
    Type Description
    ValueOutput

    ValueOutput(ValueOutputDefinition, Func<Flow, Object>)

    Declaration
    protected ValueOutput ValueOutput(ValueOutputDefinition definition, Func<Flow, object> getValue)
    Parameters
    Type Name Description
    ValueOutputDefinition definition
    Func<Flow, Object> getValue
    Returns
    Type Description
    ValueOutput

    ValueOutput<T>(String)

    Declaration
    protected ValueOutput ValueOutput<T>(string key)
    Parameters
    Type Name Description
    String key
    Returns
    Type Description
    ValueOutput
    Type Parameters
    Name Description
    T

    ValueOutput<T>(String, Func<Flow, T>)

    Declaration
    protected ValueOutput ValueOutput<T>(string key, Func<Flow, T> getValue)
    Parameters
    Type Name Description
    String key
    Func<Flow, T> getValue
    Returns
    Type Description
    ValueOutput
    Type Parameters
    Name Description
    T

    Explicit Interface Implementations

    IUnit.controlInputsData

    Declaration
    IDictionary<string, ControlInputData> IUnit.controlInputsData { get; }
    Returns
    Type Description
    IDictionary<String, ControlInputData>
    Implements
    IUnit.controlInputsData

    IUnit.controlOutputsData

    Declaration
    IDictionary<string, ControlOutputData> IUnit.controlOutputsData { get; }
    Returns
    Type Description
    IDictionary<String, ControlOutputData>
    Implements
    IUnit.controlOutputsData

    IUnit.parentGraph

    Declaration
    FlowGraph IUnit.parentGraph { get; }
    Returns
    Type Description
    FlowGraph
    Implements
    IUnit.parentGraph

    IUnit.valueInputsData

    Declaration
    IDictionary<string, ValueInputData> IUnit.valueInputsData { get; }
    Returns
    Type Description
    IDictionary<String, ValueInputData>
    Implements
    IUnit.valueInputsData

    IUnit.valueOutputsData

    Declaration
    IDictionary<string, ValueOutputData> IUnit.valueOutputsData { get; }
    Returns
    Type Description
    IDictionary<String, ValueOutputData>
    Implements
    IUnit.valueOutputsData

    Extension Methods

    XDescriptorProvider.Descriptor(Object)
    XDescriptorProvider.Descriptor<TDescriptor>(Object)
    LiteralUtility.ToLiteralString(Object)
    LiteralUtility.ToLiteralStringOrDefault(Object)
    LiteralUtility.TryToLiteralString(Object, out String)
    XFilterProvider.Filter(Object)
    XFilterProvider.Filter<TFilter>(Object)
    Cloning.Clone(Object, ICloner, Boolean)
    Cloning.Clone(Object, ICloner, Boolean, out Dictionary<Object, Object>)
    Cloning.Clone<T>(T, ICloner, Boolean)
    Cloning.Clone<T>(T, ICloner, Boolean, out Dictionary<Object, Object>)
    Cloning.CloneViaSerializationPolicy(Object)
    Cloning.CloneViaSerializationPolicy(Object, out Dictionary<Object, Object>)
    Cloning.CloneViaSerializationPolicy<T>(T)
    Cloning.CloneViaSerializationPolicy<T>(T, out Dictionary<Object, Object>)
    Cloning.CloneInto(Object, ref Object, ICloner, Boolean)
    Cloning.CloneInto(Object, ref Object, ICloner, Boolean, out Dictionary<Object, Object>)
    Cloning.CloneInto<T>(T, ref Object, ICloner, Boolean)
    Cloning.CloneInto<T>(T, ref Object, ICloner, Boolean, out Dictionary<Object, Object>)
    Cloning.CloneIntoViaSerializationPolicy(Object, ref Object)
    Cloning.CloneIntoViaSerializationPolicy(Object, ref Object, out Dictionary<Object, Object>)
    Cloning.CloneIntoViaSerializationPolicy<T>(T, ref Object)
    Cloning.CloneIntoViaSerializationPolicy<T>(T, ref Object, out Dictionary<Object, Object>)
    Cloning.CloneValueType(Object)
    ConversionUtility.ConvertTo<TSource>(TSource, Type)
    ConversionUtility.IsLateConvertibleTo(Object, Type, Boolean)
    ConversionUtility.IsLateConvertibleTo<T>(Object, Boolean)
    ConversionUtility.LateConvertTo(Object, Type)
    ConversionUtility.LateConvertTo<T>(Object)
    ConversionUtility.TryLateConvertTo(Object, Type, out Object, Boolean)
    ConversionUtility.TryLateConvertTo<T>(Object, out T, Boolean)
    TypeUtility.ToShortString(Object, Int32)
    TypeUtility.CastTo<T>(Object)
    Serialization.FullSerialize(Object, Boolean)
    Serialization.OdinSerialize<T>(T, DataFormat)
    Serialization.OdinSerialize<T>(T, ref OdinSerializer.SerializationData, DataFormat)
    XObservableDisposable.EnsureNotDisposed(IObservableDisposable)
    LinqUtility.Yield<T>(T)
    UnityObjectUtility.IsUnityNull(Object)
    UnityObjectUtility.UnityNullCoalesce(Object, Object)
    UnityObjectUtility.ToSafeString(Object)
    BoltGenerationUtility.GenerateLiteral(Object, IGeneration)
    XGeneratorProvider.Generator(Object, IGeneration)
    XGeneratorProvider.Generator<TGenerator>(Object, IGeneration)
    XGeneratorProvider.HasGenerator(Object, IGeneration)
    XGeneratorProvider.HasGenerator<TGenerator>(Object, IGeneration)
    XGeneratorProvider.TryGetGenerator(Object, out IGenerator, IGeneration)
    XGeneratorProvider.TryGetGenerator<TGenerator>(Object, IGeneration, out TGenerator)
    XUnitOptionProvider.Option(IUnit)
    XUnitOptionProvider.Option<TOption>(IUnit)
    HybridConversionUtility.ConvertTo(Object, HybridType, HybridType)
    HybridConversionUtility.IsLateConvertibleTo(Object, HybridType, Boolean)
    HybridConversionUtility.LateConvertTo(Object, HybridType)
    HybridConversionUtility.TryLateConvertTo(Object, HybridType, out Object, Boolean)
    HybridTypeUtility.GetHybridType(Object)
    IsUtility.Is<TO, TC>(TO, out TC)
    GraphsExceptionUtility.GetException(IGraphElementWithDebugData, GraphPointer)
    GraphsExceptionUtility.SetException(IGraphElementWithDebugData, GraphPointer, Exception)
    GraphsExceptionUtility.ClearExceptionInHierarchy(IGraphElementWithDebugData, GraphPointer)
    GraphsExceptionUtility.HandleException(IGraphElementWithDebugData, GraphPointer, Exception)
    XUnit.CompatibleValueInput(IUnit, HybridType)
    XUnit.CompatibleValueOutput(IUnit, HybridType)
    UnitDefinitionUtility.DefineControlInput(IUnit, String, Func<Flow, ControlOutput>)
    UnitDefinitionUtility.DefineControlInputCoroutine(IUnit, String, Func<Flow, IEnumerator>)
    UnitDefinitionUtility.DefineControlInputCoroutine(IUnit, String, Func<Flow, ControlOutput>, Func<Flow, IEnumerator>)
    UnitDefinitionUtility.DefineControlInput(IUnit, ControlInputDefinition, Func<Flow, ControlOutput>, Func<Flow, IEnumerator>)
    UnitDefinitionUtility.DefineControlOutput(IUnit, String)
    UnitDefinitionUtility.DefineControlOutput(IUnit, ControlOutputDefinition)
    UnitDefinitionUtility.DefineValueInput(IUnit, HybridType, String)
    UnitDefinitionUtility.DefineValueInput<T>(IUnit, String)
    UnitDefinitionUtility.DefineValueInput<T>(IUnit, String, T)
    UnitDefinitionUtility.DefineValueInput(IUnit, ValueInputDefinition)
    UnitDefinitionUtility.DefineValueOutput(IUnit, HybridType, String)
    UnitDefinitionUtility.DefineValueOutput(IUnit, HybridType, String, Func<Flow, Object>)
    UnitDefinitionUtility.DefineValueOutput<T>(IUnit, String)
    UnitDefinitionUtility.DefineValueOutput<T>(IUnit, String, Func<Flow, T>)
    UnitDefinitionUtility.DefineValueOutput(IUnit, ValueOutputDefinition)
    UnitDefinitionUtility.DefineValueOutput(IUnit, ValueOutputDefinition, Func<Flow, Object>)
    UnitDefinitionUtility.DefineRequirement(IUnit, ValueInput, ControlInput)
    UnitDefinitionUtility.DefineRequirement(IUnit, ValueInput, ValueOutput)
    UnitDefinitionUtility.DefineAssignment(IUnit, ValueOutput, ValueOutput)
    UnitDefinitionUtility.DefineAssignment(IUnit, ControlInput, ValueOutput)
    UnitDefinitionUtility.DefineSuccession(IUnit, ControlInput, ControlOutput)
    UnitDefinitionUtility.DefineSuccession(IUnit, ControlOutput, ControlOutput)
    UnitDefinitionUtility.DefineDelegation(IUnit, ValueOutput, ControlOutput)
    PrivateReflectionUsingDynamicExtensions.AsDynamic(Object)
    JsonWriter.ToJson(Object)
    Back to top Copyright © 2020 Unity Technologies
    Generated by DocFX