Это то, для чего были созданы фабрики.
Если вы чувствуете, что на вашей фабрике слишком мало кода, спросите себя, какую выгоду она дает вам от простого создания встроенного экземпляра. Если преимущества перевешивают затраты на добавленный код, не беспокойтесь об этом.
Я бы лично избегал места обслуживания, или, если вам действительно нужно его использовать, я все равно спрятал бы его за фабрикой. Расположение службы обычно легко злоупотребляет и может привести к тому, что ваш контейнер найдет путь к коду, с которым он не должен иметь ничего общего.
Для удобства некоторые контейнеры позволяют указать фабрику, которая будет использоваться контейнером при создании экземпляра компонента. В этом случае ваш класс может напрямую зависеть от IBar
, но ваш контейнер будет вызывать IBarCreator
, когда ему потребуется новый экземпляр. Замок Виндзор имеет методы UseFactory
и UseFactoryMethod
в своих API, например.