У меня возникают проблемы при разработке классов, чтобы наилучшим образом использовать принципы DI / IoC, особенно когда класс разделяет зависимость с одной из своих зависимостей (т. Е. X имеет зависимости Y и Z, а Y имеет зависимость Z).
Пример, вероятно, будет полезен:
Допустим, у меня есть класс, который будет инкапсулировать некоторую информацию о соединении для моего приложения. Назовите это «ConnectionInfo»
class ConnectionInfo
{
// ...
}
Я разработал рабочий класс, который использует информацию о соединении, поэтому я буду вводить свои зависимости через конструктор.
class Worker
{
public Worker(ConnectionInfo c)
{
// ...
}
}
Теперь, допустим, я хочу построить еще один класс. Ему нужен доступ к информации о соединении, но я также хочу получить доступ к функциям, предоставляемым классом Worker.
class AnotherClass
{
public AnotherClass(ConnectionInfo c, Worker w)
{
// ...
}
}
Это все хорошо. Однако существует подразумеваемая логическая связь между объектом ConnectionInfo, внедренным в Worker, и объектом ConnectionInfo, внедренным в AnotherClass. Дизайн имеет смысл только тогда, когда они одинаковы. Это не принудительно, хотя. Ничто не мешает одному ConnectionInfo, внедренному в AnotherClass, и совершенно не связанному ConnectionInfo, внедренному в Worker.
Я неправильно отношусь к IoC / DI?
Должны ли классы быть разработаны по-другому или проблемы должны решаться по-другому (например, принудительное выполнение с помощью проверки параметров или, может быть, просто оставление его до контейнера IoC)?