Прямо сейчас у меня есть структура типа, подобная следующей
interface IFoo { }
class FooA : IFoo { }
class FooB : IFoo { }
//not a builder. generates based on conditions
interface IFooEmitter<TFoo>
{
TFoo EmitFoo();
}
abstract class FooEmitterBase<TFoo> : IFooEmitter<TFoo> { }
class FooAEmitter : FooEmitterBase<FooA> { }
[RequiresEmitter(typeof(FooAEmitter))]
class FooBEmitter : FooEmitterBase<FooB> { }
Я хочу создать где-нибудь FooBEmitter ...
var b = FooEmitterManager.CreateAndStore<FooBEmitter>();
Create () видит атрибут RequEmitter наFooBEmitter и рекурсивно создает FooAEmitter.
//continued from above
var a = FooEmitterManager.CreateAndStore<FooAEmitter>();
Debug.Assert(a == b); // true
FooBEmitter НЕ классически зависит от (хранит ссылку на) FooAEmitter. Это зависит от
- FooAEmitter, являющегосясозданный и сохраненный в FooEmitterManager
- FooA, который FooAEmitter будет генерировать
Есть ли какой-то способ упростить создание этого типа с учетом зависимостей с помощью популярных контейнеров .NET IoC, таких как Castle или NInject?