using System;
namespace ZeroLevel.Patterns.DependencyInjection
{
///
/// Интерфейс с методами для реализации паттерна пул объектов в контейнере
///
public interface IPoolContainer
{
#region Register poolable dependencies
///
/// Регистрация пула
///
/// Тип контракта
/// Начальное количество объектов в пуле
/// Максимальное количество объектов в пуле (при -1 пул не ограничен)
void RegisterPool(int initialCount, int capacity);
///
/// Регистрация разрешения зависимости
///
/// Тип контракта
/// Тип разрешения
void RegisterPoolable();
///
/// Регистрация разрешения зависимости
///
/// Тип контракта
/// Тип разрешения
/// Имя разрешения зависимости
void RegisterPoolable(string resolveName);
///
/// Регистрация разрешения зависимости
///
/// Тип контракта
/// Тип разрешения
void RegisterPoolable(Type contractType, Type implementationType);
///
/// Регистрация разрешения зависимости
///
/// Тип контракта
/// Тип разрешения
/// Имя разрешения зависимости
void RegisterPoolable(Type contractType, Type implementationType, string resolveName);
///
/// Регистрация разрешения зависимости
///
/// Тип контракта
/// Экземпляр
void RegisterPoolable(TContract implementation);
///
/// Регистрация разрешения зависимости
///
/// Тип контракта
/// Экземпляр
void RegisterPoolable(Type contractType, object implementation);
#endregion
#region Register poolable parametrizied dependencies
///
/// Регистрация разрешения зависимости с указанием параметров конструктора
///
/// Тип контракта
/// Тип разрешения
/// Аргументы конструктора
void RegisterPoolableParametrizied(object[] constructorParameters);
///
/// Регистрация разрешения зависимости с указанием параметров конструктора
///
/// Тип контракта
/// Тип разрешения
/// Имя разрешения зависимости
/// Аргументы конструктора
void RegisterPoolableParametrizied(string resolveName, object[] constructorParameters);
///
/// Регистрация разрешения зависимости с указанием параметров конструктора
///
/// Тип контракта
/// Тип разрешения
/// Аргументы конструктора
void RegisterPoolableParametrizied(Type contractType, Type implementationType, object[] constructorParameters);
///
/// Регистрация разрешения зависимости с указанием параметров конструктора
///
/// Тип контракта
/// Тип разрешения
/// Имя разрешения зависимости
/// Аргументы конструктора
void RegisterPoolableParametrizied(Type contractType, Type implementationType, string resolveName, object[] constructorParameters);
#endregion
}
}