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-контейнер

Ответы на вопрос(1)

Ваш ответ на вопрос