Пользовательская область Guice или лучший подход?

Вот моя проблема:

Во-первых, важно знать, что я пишу симуляцию. Это отдельное приложение с однопоточным-потоком. У меня есть по существу два класса объектов, которые имеют разные требования к области видимости.

  1. Классы, которые следует использовать как синглтоны на протяжении всей симуляции. Например, экземпляр Random.

  2. Группы классов, которые создаются вместе, и внутри группы каждый экземпляр следует рассматривать как синглтон. Например, скажем, RootObjectявляется классом верхнего уровня и имеет зависимость от ClassAи ClassB, оба из которых имеют зависимость от ClassD. Для любого заданного RootObjectобе его зависимости(ClassAиClassB)должны зависеть от одного и того же экземпляра ClassD. Однако экземпляры ClassDне должны использоваться в разных экземплярах RootObject.

Надеюсь, это имеет смысл. Я могу придумать два подхода к этому. Один из них — пометить все внедренные объекты как синглтоны, создать корневой инжектор и выделить дочерний инжектор каждый раз, когда мне нужно создать новый экземпляр RootObject. Затем экземпляры RootObjectи все его зависимости создаются как синглтоны, но эта информация об области видимости отбрасывается при следующем создании другого RootObject.

Второй подход заключается в реализации некоторого типа пользовательской области действия.

Документация Guice дает противоречивые советы... С одной стороны, там говорится, что у вас должен быть один инжектор, и что в идеале он вызывается один раз для создания класса верхнего уровня. С другой стороны, он говорит держаться подальше от пользовательских областей.

22
задан Felix Kling 12 May 2012 в 23:05
поделиться