using System;

namespace Robust.Shared.IoC
{
    /// <summary>
    /// Specifies that the field this is applied to is a dependency,
    /// which will be resolved by <see cref="IoCManager" /> when the containing class is instantiated.
    /// </summary>
    /// <remarks>
    /// <para>
    /// The dependency is resolved as if <see cref="IoCManager.Resolve{T}" /> were to be called,
    /// but it avoids circular references and init order issues due to internal code in the <see cref="IoCManager" />.
    /// </para>
    /// <para>
    /// The dependency can be injected into read only fields without issues,
    /// and as a matter of fact it is recommended to use read only fields.
    /// </para>
    /// <para>
    /// If you would like to run code after the dependencies have been injected, use <see cref="IPostInjectInit" />
    /// </para>
    /// </remarks>
    [AttributeUsage(AttributeTargets.Field)]
    public class DependencyAttribute : Attribute
    {
    }
}
