NULL во время компиляции.
я естьSocketManager
класс, который содержитSocket
и другие поля. Все поля кромеSocket
может быть введен во время создания графа объекта с помощью структуры DI. Моя идея состояла в том, чтобы просто построить весь граф объекта заранее, оставивSocket
очистить и установить его во время выполнения. Это позволило бы мне завершитьSocketManager
создание экземпляра в одном месте кода и использование этого экземпляра во всей моей программе (как это уже было установлено как зависимость через инфраструктуру DI)? Это стандартный способ «внедрения» зависимостей времени выполнения или это плохая практика?
Абстрактная фабрика кажется плохой идеей по двум причинам: а) она каждый раз создает новый объект б) она требует параметров времени выполнения в каждом месте, где я хочу создать объект
Позвольте мне проиллюстрировать мою проблему:
Класс SocketManager:
public class SocketManager {
//i'll only receive the socket at runtime
Socket socket;
//this object is available at compile-time and can be injected through the DI container
InjectableObject obj;
}
Где-то в моем коде [CodePosition1] я получу сокет так:
public class SocketCreator{
SocketManager socketManager; //will be injected through DI container at startup
Socket socket = this.serverSocket.accept();
// at this point the socket manager is fully initialized
socketManager.setSocket(socket);
}
Во многих других местах [CodePosition2] я теперь могу использовать зависимость SocketManager
public class RandomClass {
//injected at compile-time through DI container, but only usable after [CodePosition1]
// was executed
SocketManager socketManager;
...
socketManager.getSocket().doSth()
...
}
Проблема в том, чтоSocketManager
не полностью инициализирован, до [CodePosition1] во время выполнения, поэтому я не знаю другого способа, кроме как использовать init () или установщик в SocketManager для «завершения» инициализации SocketManager. Это, однако, дырявая абстракция, как объясняется в этом посте:Есть ли шаблон для инициализации объектов, созданных через DI-контейнер