Как я могу ввести один и тот же объект через разные интерфейсы?
Используя 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 );