Как правило, ваш DI-контейнер будет искать конструктор с наибольшим количеством параметров, потому что эта перегрузка определяет наибольшее количество зависимостей, требуемых вашим классом. Причина, по которой у вас не может быть двух конструкторов с одинаковым количеством параметров, заключается в том, что контейнер не может надежно определить, какую перегрузку вы хотите использовать. Контейнер не знает, как будет использоваться класс, только то, что в системе требуется экземпляр этого класса. Если обе перегрузки принимают типы class
, то любая из них может принять null
в качестве значения. В таких случаях, какую перегрузку следует использовать?
Многие платформы DI позволяют вам выборочно выбирать, какой конструктор вызывать. Вам нужно обратиться к документации вашей платформы, чтобы увидеть, как это происходит. Но в общем случае, когда вы не делаете выборочную конструкцию, поведение по умолчанию состоит в том, чтобы выбрать конструктор с наибольшим количеством параметров.
В этом случае вы можете захотеть go с выборочной конструкцией, если доступный. В противном случае вам, скорее всего, придется реорганизовать код в один конструктор, который принимает два параметра. Это не означает, что ваш код должен использовать оба параметра в любом заданном вызове, но это означает, что контейнер будет пытаться обновить оба параметра, а затем и любые зависимости, требуемые любым из этих параметров ... до конца дерево зависимостей. Если это окажется слишком тяжелым, то вы можете посмотреть ленивую реализацию вашего конкретного фреймворка.