Показать сообщение отдельно
Старый 20.09.2015, 15:03
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 1  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
По умолчанию [Robotlegs] Не инжектится Service в Command

Здравствуйте, почему-то не заинжектился сервис в команду
Версия Robotlegs 2
Вот конфиг
Код AS3:
...
[Inject]
public var injector:IInjector;
 
public function configure():void
		{
			injector.map(FloxService);
 
			commandMap.map(ConfigEvent.CONFIG_INIT_COMPLETE).toCommand(ShowIntroScreenCommand);
 
			commandMap.map(ScreenEvent.TO_MAIN_SCREEN_REQUEST).toCommand(ShowMainScreenCommand);
			commandMap.map(ScreenEvent.TO_INTRO_SCREEN_REQUEST).toCommand(ShowIntroScreenCommand);
			commandMap.map(ScreenEvent.SAVE_DATA_REQUEST).toCommand(SaveDataCommand);
 
			mediatorMap.map(IntroScreen).toMediator(IntroScreenMediator);
			mediatorMap.map(MainScreen).toMediator(MainScreenMediator);
 
			context.afterInitializing(initComplete);
		}
 
		private function initComplete():void
		{
			dispatcher.dispatchEvent(new ConfigEvent(ConfigEvent.CONFIG_INIT_COMPLETE));
		}
...
Команда
Код AS3:
public class SaveDataCommand extends Command{
 
    [Inject]
    public var service:IService;
 
    public function SaveDataCommand() {
        trace("service = "+service);
        if(service){
            service.saveData();
        }
        else{
            trace("Service is NULL");
        }
 
    }
}
}
Сервис
Код AS3:
package dev.div0.services
{
import com.gamua.flox.Flox;
 
public class FloxService implements IService {
 
	public function saveGoToMainCount(count:int):void {
		Flox.logEvent("go_main_clicked", {count: count});
	}
 
	public function saveGoToIntroClick():void {
		Flox.logEvent("go_intro_clicked");
	}
 
	public function saveData():void {
		Flox.getTime(getTimeCompleteHandler, getTimeErrorHandler);
	}
 
	private function getTimeErrorHandler(error:String, httpStatus:int):void {
			trace("saveData error:"+error +".  httpStatus:"+httpStatus);
		}
 
		private function getTimeCompleteHandler(time:Date):void {
			new SaveData(time.toString());
		}
	}
}
Вот текст ошибки
Код:
Error: Injector is missing a mapping to handle injection into property "service" of object "[object SaveDataCommand]" with type "dev.div0.commands::SaveDataCommand". Target dependency: "dev.div0.services::IService|"
Эта ошибка возникает если я инжектю сервис в команду в виде интерфейса

Если же инжектю в команду реализацию сервиса
Код AS3:
[Inject]
    public var service:FloxService;
то в результате
Код:
 Service is NULL
Подскажите, пожалуйста, где я ошибся

Добавлено через 1 час 14 минут
Вопрос снят. Моя невнимательность.
В команде не переопределил метод execute(), в котором следует обращаться к сервису. Вместо этого в конструкторе пытаюсь это сделать


Последний раз редактировалось djyamato; 20.09.2015 в 16:18.