Как я могу ввести один и тот же объект через разные интерфейсы?

Используя Robotlegs 2.0, возможно ли объявить синглтон в контексте и внедрить его в несколько классов, где каждая инъекция запрашивает другой интерфейс?

Класс для инъекции:

 class MyClass implements IFoo, IBar {}

Место инъекции 1:

 class NeedFoo {
    [Inject]
    public var foo:IFoo;
 } 

Инъекционный участок 2:

 class NeedBar {
    [Inject]
    public var bar:IBar;
 } 

Я хочу, чтобы обе инъекции были для одного и того же экземпляра, но если я создаю два сопоставления, то каждое получает свой собственный экземпляр:

 injector.map( IFoo ).toSingleton( MyClass );
 injector.map( IBar ).toSingleton( MyClass );

Итак, я закончил этим:

 var instance:MyClass = new MyClass();
 injector.map( IFoo ).toValue( instance );
 injector.map( IBar ).toValue( instance );

Есть ли способ просто сказать, что этот объект должен быть предоставлен для любого интерфейса, который он реализует, а не индивидуально для каждого?

1 ответ

Решение

Да, это так, но это немного запутанный и действительно неясный банкомат. Мы собираемся предоставить немного синтаксического сахара для него в будущем, но на данный момент вы можете сделать это:

injector.map( IFoo ).toSingleton( MyClass );
var provider: DependencyProvider = injector.getMapping( IFoo ).getProvider();
injector.map( IBar ).toProvider( provider );

или же

var provider: DependencyProvider = injector.map( IFoo ).toSingleton( MyClass ).getProvider();
injector.map( IBar ).toProvider( provider );
Другие вопросы по тегам