using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tango.Core.DI
{
///
/// Represents the Tango IOC container interface.
///
public interface ITangoIOC
{
///
/// Registers the specified type.
///
///
void Register() where T : class;
///
/// Registers the specified instance type and instance.
///
///
/// The instance.
void Register(T instance) where T : class;
///
/// Registers the specified type.
///
/// The type.
void Register(Type type);
///
/// Registers the specified type and implementation type.
///
/// The type.
/// The implementation.
void Register(Type type, Type implementation);
///
/// Registers the specified type and instance.
///
/// The type.
/// The instance.
void Register(Type type, Object instance);
///
/// Registers this instance.
///
/// The type of the type.
/// The type of the implementation.
void Register() where Implementation : class, Type;
///
/// Registers the specified type, implementation and implementation instance.
///
/// The type of the type.
/// The type of the implementation.
/// The instance.
void Register(Implementation instance) where Implementation : class, Type;
///
/// Determines whether the specified type is registered.
///
///
///
/// true if this instance is registered; otherwise, false.
///
bool IsRegistered();
///
/// Determines whether the specified type is registered.
///
/// The type.
///
/// true if the specified type is registered; otherwise, false.
///
bool IsRegistered(Type type);
///
/// Unregisters the specified type.
///
///
void Unregister();
///
/// Unregisters the specified type.
///
/// The type.
void Unregister(Type type);
///
/// Gets the instance of type T.
///
///
///
T GetInstance();
///
/// Injects any dependencies to the target properties using the .
///
/// The target.
void Inject(Object target);
///
/// Executes the specified action when type T is available. if already available action will be executed immediately.
///
///
/// The callback.
///
void GetInstanceWhenAvailable(Action callback);
///
/// Gets all instances by the specified base type.
///
///
///
IEnumerable GetAllInstancesByBase();
///
/// Gets all instances by the specified base type.
///
/// Type of the base.
///
IEnumerable