Это правильный способ использования фабрики. Фабрика - это не только способ создания объектов, но и способ сказать: мне нужна специальная инициализация для таких объектов. Я думаю, что с вашей проблемой лучшим решением было бы уведомить фабрику о каком-либо событии, например, о ликвидации. Таким образом, создание вашего объекта будет выполнено таким образом: создать, подписать фабрику на событие вновь созданного объекта. Каждый раз, когда объект будет удален, вы уведомите об этом фабрику и выполните необходимые действия.
Если вам не нравится помещать это в фабрику, вы можете делегировать это какому-то другому объекту, например DeathKeeper ;-). Так что ваш код будет выглядеть примерно так:
//Inside factory create method
MyObject obj = GetNewInitializedObject();
_detahKeeper.RegisterObject(obj);
return obj;
Теперь каждый раз, когда вам нужно будет удалить объект, ваш объект уведомит хранителя смерти и заставит всю логику утилизировать. Кстати, я не знаю, как все это работает, но вы можете использовать интерфейс IDisposable, чтобы сделать собственную логику для удаления ресурсов, удерживаемых объектом. Решение зависит от того, что находится в вашем проекте и зависит от вас.