t43
Новичок
Привет всем!
Вообщем хочу реализовать свой DI. Так сказать в учебных целях)
На данный момент реализовал первую версию, но хочется сделать, что-то более удобное и быстрое.
Для новой версии пока что сделал вот такой вот интерфейс.
Хочется у слушать мнение опытных людей, чего не хватает, что лишнее и т.д.
Вообщем хочу реализовать свой DI. Так сказать в учебных целях)
На данный момент реализовал первую версию, но хочется сделать, что-то более удобное и быстрое.
Для новой версии пока что сделал вот такой вот интерфейс.
Хочется у слушать мнение опытных людей, чего не хватает, что лишнее и т.д.
PHP:
<?php
interface IDI {
/**
* Возвращает сервис
*
* @param $service (имя запрашиваемого серсвиса)
* @param $arguments (аргументы)
* @return mixed
*/
public function get($service, array $arguments=null);
/**
* Связывает интерфейс с конкретным сервисом.
*
* @param $interface (имя интерфейса)
* @param $service (имя соответсвующего сервиса)
* @param $share (использовать как синглетон)
* @return mixed
*/
public function bind($interface, $service, $share=false);
/**
* Связывает интерфейс с конкретным сервисом, для конкретного сервиса.
*
* @param $service
* @param $interface
* @param $dependencyService
* @param $share
* @return mixed
*/
public function bindFor($service, $interface, $dependencyService, $share=false);
/**
* Все сервисы реализующие этот интерфейс будут синглетонами.
*
* @param $interface
* @return mixed
*/
public function shareInterface($interface);
/**
* Задаёт аргументы для определённого сервиса
*
* @param $service
* @param array $arguments
* @return mixed
*/
public function setArgumentFor($service, array $arguments);
/**
* Если не используется типизация.
*
* Связывает аргумент сервиса с определённой зависимостью.
*
* @param $service
* @param $argument
* @param $dependencyService
* @return mixed
*/
public function bindArgumentAsDependency($service, $argument, $dependencyService);
/**
* Аналогичен bindArgumentAsDependency, но второй параметр массив вида:
*
* [
* 'argumentName'=>'dependency'
* ]
*
* @param $service
* @param $dependency
* @return mixed
*/
public function bindArgumentsAsDependency($service, array $dependency);
/**
* Если true, то будут генерирвоаться прокси-класс, и передаваться не сами зависимости, а прокси.
*
* @param $bool
* @return mixed
*/
public function useLazyLoad($bool);
/**
* Если true, то будет происходить кэширование карты зависимостей.
*
* @param $bool
* @return mixed
*/
public function useCompilation($bool);
}
Последнее редактирование: