Я относительно новичок в внедрении зависимостей, так что, возможно, я до некоторой степени забочусь о концепции.Тем не менее, я пытаюсь добиться чего-то вроде следующего, но не уверен, возможно ли это:
Допустим, у меня есть два контейнера, каждый из которых содержит разные экземпляры одного и того же типа зависимости.Например, каждый из них содержит различные отдельные экземпляры MyApplicationContext
и MyRequestContext
.
. Теперь давайте скажем, что у меня есть несколько классов, которые зависят от одного (или обоих) этих экземпляров.Они не должны беспокоиться о том, какой из двух контейнеров они используют;им просто необходим экземпляр зависимости, чтобы выполнить работу.
В идеальном мире каждый из этих надежных классов выполняет статический вызов в своем конструкторе, который, в свою очередь, рефлексивно вводит зависимости из соответствующего контейнера ...
public class MyDependableClass{
protected MyApplicationContext Application {get; set;}
protected MyRequestContext Request {get; set;}
public MyDependableClass() {
Dependencies.Inject(this);
}
}
Однако, AFAIK, нет практического способа определить подходящий контейнер.Я рассмотрел возможность регистрации каждого объекта в определенном контейнере (например, container.Register(obj);
), но это было бы трудоемким и не сработало бы, если бы в конструкторе требовались зависимости.В качестве альтернативы вы можете проанализировать стек вызовов, чтобы вывести контейнер из зарегистрированного объекта верхнего уровня ... не будет работать для асинхронных вызовов и т. Д.
Любые идеи?
Пример: У меня может быть несколько классов, которые могут зависеть от экземпляра прокси;давайте назовем это ILogicProxy
.Этот прокси может переадресовывать вызовы на локальную или удаленную логику на другом компьютере.Кроме того, приложение может устанавливать соединения с несколькими удаленными компьютерами.Итак ... у нас есть потенциально несколько ILogicProxy
экземпляров, которые нужно внедрить в несколько классов ... но какой из них идет куда?Подобное решение может просто использовать простое «внедрение свойства сеттера», однако оно не масштабируется, когда требуется больше зависимостей, поскольку это приведет к тому, что процесс «подключения» станет грязным / многословным.