Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   API приложений и сред (http://www.flasher.ru/forum/forumdisplay.php?f=61)
-   -   [...] RobotLegs2 объявление классов (http://www.flasher.ru/forum/showthread.php?t=202590)

Akopalipsis 25.07.2013 21:40

RobotLegs2 объявление классов
 
Не могу до конца разобраться и не могу не чего найти по вопросу, что именно делают методы в конце карты внедрения:
Код AS3:

1)super.injector.map(Class).asSingleton
2)super.injector.map(Class).getProvider
3)super.injector.map(Class).hasProvider
4)super.injector.map(Class).locally
5)super.injector.map(Class).seal
6)super.injector.map(Class).setInjector
7)super.injector.map(Class).softly
8)super.injector.map(Class).toProvider
9)super.injector.map(Class).toSingleton
10)super.injector.map(Class).toType
11)super.injector.map(Class).toValue
12)super.injector.map(Class).unseal

Стараюсь как могу, но тут упераюсь в тотальное отсутствие документации с описанием. Примеры с гигхаба помогают, но мало. Я немного понимаю о этом и руководства из первой версии, эти методы указывают как создавать экземпляр и сколько раз. Но на этом понимание останавливаются.

Добавлено через 2 часа 34 минуты
По своей глупости я не правильно задал вопрос, это вообще не относится к RL2, это из SwiftSuspenders.
Если кто то знает где можно почитать про SwiftSuspenders 2 дайте пожалуйста ссылку.
Очень хочу освоить RL2, но четвёртый день просто до сумашествия без прорыва.

TWETTI 26.07.2013 21:21

Здесь есть описание всех этих методов.

Если написать
Код AS3:

injector.map(YourClass).asSingleton();

то при запросе YourClass, всегда будет возвращается один единственный экземпляр этого класса.

Если написать
Код AS3:

injector.map(YourClass).toValue(new SomeValue);

то при запросе YourClass, всегда будет возвращается единственный экземпляр класса, который был указан в скобках toValue.

Если написать
Код AS3:

injector.map(YourClass).toType(BetterClass);

то при запросе YourClass, всегда будет возвращается новый экземпляр класса, который был указан в скобках toType.

Вот, что нашел в интернете:
Код AS3:

injector.map(YourClass); //current equivalent: injector.mapClass(YourClass, YourClass);
injector.map(YourClass, 'name'); //current equivalent: injector.mapClass(YourClass, YourClass, 'name');
injector.map(YourClass).to(YourClass); //equivalent to the first mapping (i.e.: optional)
injector.map(YourClass, 'name').to(YourClass); //equivalent to the second mapping (i.e.: optional)
injector.map(YourInterface).toType(YourClass); //current equivalent: injector.mapClass(YourInterface, YourClass);
injector.map(YourClass).asSingleton(); //current equivalent: injector.mapSingleton(YourClass);
injector.map(YourInterface).toType(YourClass).asSingleton(); //current equivalent: injector.mapSingletonOf(YourInterface, YourClass);
injector.map(YourInterface).toValue(value); //current equivalent: injector.mapValue(YourInterface, value);
var request : InjectionRequest = injector.map(YourClass); //current equivalent: var request : InjectionConfig = injector.getMapping(YourClass);

Полезно, если знаете Robotlegs 1.

P.S. Остальные методы не так важны для изучения RL2.

Akopalipsis 26.07.2013 22:42

TWETTI Большое Вам Спасибо! Сейчас продолжу изучение класса который находится по Вашей ссылке. Продолжу, это по тому, я мельком его уже сегодня пробежал, точнее сказать пытался перевести гуглом, но этот перевод плодовитым не оказался. В общем разрываюсь между классами,
примерами на гигхабе и.. и всё, больше нет не чего! Чтобы лучше обрисовать свою ситуацию - представьте, что я только начал изучать as3, но у меня не было как у всех первых игр сделаных не по шаблонам, не первых сайтов, а вместо этого я сразу начал учить MVC, которую как надеюсь понял. И в тот самый момент, как мне показалось что я понял, я услышал про RL2. И вот теперь я кое как, маленькими шагами приближаюсь к самому началу постижение этого фрейворка. Тяжело только из-за отсутствия информации. Сами авторы говорят, что вторая версия создана для тех кто учился на первой версии и что не каких других хелпов и книг уже не будет. Советуют учится на том что есть. Если подытожить все сказанное, то получится - если Вы увидели вопрос в этой теме и у Вас есть время, то не проходите мимо, потому что как сами понимаете, больше помощи ждать и искать особо неоткуда.
Цитата:

Вот, что нашел в интернете:
я тоже натыкался на этот код на каком то полукитайском сайте и скопировал просто в блокнот, думая что когда нибудь это может завершить сложения пазла.
И ещё есть один вопрос:
Цитата:

то при запросе YourClass, всегда будет возвращается один единственный экземпляр этого класса.
то есть, во всем приложении создаться только один экземпляр этого класса и при последующих обращениях\внедрениях экземпляров уже создаваться не будет? Как бы оператора new уже не будет?
И поправьте меня если я ошибаюсь:
Код AS3:

injector.map(YourClass).toValue(new SomeValue);

при обращении к классу YourClass, а если быть точным
Код AS3:

package  
{
        public class MyClass
        {
                /**
                * по запуску класса Contex он внедрит в это класс
                * новый экземпляр класса YourClass. То есть он создаст где то в своей памяти
                * новый экземпляр класса и при каждом обращении к этому ( MyClass ) классу
                * больше не будет создавать новый\очередной экземпляр класса YourClass ?
                * или он будет при каждом обращении к классу MyClass создавать очередной
                * экзепляр класса YourClass, а затем удалять его и так всегда?
                */

                [Inject]
                public var _yourClass:YourClass;
 
                public function MyClass()
                {
 
                }
                overide public function initialize():void
                {
                        //и здесь обращусь к методам класса YourClass
                }
 
        }
 
}

Код AS3:

injector.map(YourClass).toSingleton(IYourClass);

при обращении к классу YourClass будет всегда возвращать один и тот же экземпляр IYourClass

TWETTI 26.07.2013 23:24

Цитата:

то есть, во всем приложении создаться только один экземпляр этого класса и при последующих обращениях\внедрениях экземпляров уже создаваться не будет? Как бы оператора new уже не будет?
Да. Это называется синглтон. Есть такой шаблон проектирования.

Цитата:

И поправьте меня если я ошибаюсь:
Ошибаетесь. Не по запуску класса Context, а при создании класса MyClass. И в момент инъекцкии переменной _yourClass будет происвоен экземпляр класса YourClass, который мы передали здесь:
Код AS3:

injector.map(YourClass).toValue(new SomeValue);

Или так:
Код AS3:

// Создаем некий класс и меняем его состояние:
var some:YourClass = new YourClass();
some.someVar = 1234;
some.someAction();
// Указываем, что при запросе YourClass отдавать экземпляр some.
injector.map(YourClass).toValue(some);

Код AS3:

package  
{
        public class MyClass
        {
                [Inject]
                public var yourClass:YourClass;
 
                public function MyClass()
                {
 
                }
 
                overide public function initialize():void
                {
                        trace(yourClass.someVar); // Выведет 1234
                }
        }
}

P.S. Может вам стоить изучить RL1. По нему книги есть и уроки. А потом уже перейти на RL2? Могу книжечку продать если знаете английский.

Добавлено через 9 минут
Цитата:

injector.map(YourClass).toSingleton(IYourClass);
при обращении к классу YourClass будет всегда возвращать один и тот же экземпляр IYourClass
Нет. IYourClass не класс, а интерфейс. Поменяйте класс и интерфейс местами.

Пример:
Код AS3:

injector.map(IGalleryImageService).toSingleton(FlickrImageService);

При запросе IGalleryImageService будет возвращаться FlickrImageService;

Akopalipsis 26.07.2013 23:38

Цитата:

Да. Это называется синглтон. Есть такой шаблон проектирования.
Знаю такой. Просто переспросил, чтобы быть уверенным. Наверное по этому и рекомендуют отказаться от инициализации в конструкторах.
Цитата:

P.S. Может вам стоить изучить RL1. По нему книги есть и уроки. А потом уже перейти на RL2? Могу книжечку продать если знаете английский.
А оно так на то и получается, не как не разберёшься сразу со второй версией. А книгу... я не люблю английский, да и информации как таковой много, но вот перевод... Только сегодня узнал, что словосочетание "Синтаксический сахар" - это не ошибка гугла переводчика.
Спасибо Вам Большое за помощь! Пошёл переводить весь класс InjectionMapping... удачи мне..

TWETTI 26.07.2013 23:41

Зачем вам сейчас MVC и Robotlegs? Вы же только начали изучать AS3. И зачем изучать, переводить все классы фреймворка? Я за 2 года разработки на RL использовал только asSingleton.

Akopalipsis 26.07.2013 23:59

Цитата:

Зачем вам сейчас MVC и Robotlegs?
А я не знаю, что мне ещё учить.
Цитата:

И зачем изучать, переводить все классы фреймворка?
Причина - я не знаю, что мне от туда может понадобиться, а изучая примеры, я от примера к примеру сталкивался с самописными классами, которые и так уже реализованы в RL2. И может я ошибаюсь, но у меня при просмотре множества примеров, складывалось впечатление, что монстра RL используют только из-за инжекта, который если я опять таки не ошибаюсь есть в чистом виде во фреймворке SwiftSuspenders 2.

Добавлено через 3 минуты
И возможно у Вас знакомство происходило после чтения книги и Вы уже знали, что Вам надо.
А я читаю ту же книгу, но из-за неоднозначного перевода приходится все сразу смотреть, и примеры и классы. Потом разумеется я буду думать, что за чем мне это все надо было, точно так же как я сейчас вспоминаю, как в самом начале я все в тетрадке записывал. Сейчас смешно, а тогда казалось, что ИМЕННО ТАК И НУЖНО )))

TWETTI 27.07.2013 00:15

Ответил вам в другой теме про RL2.
http://www.flasher.ru/forum/showthread.php?t=202436

Akopalipsis 27.07.2013 16:05

В чем я ошибаюсь?
Код AS3:

                public function MainConfig(stage:Stage ,contextView:DisplayObjectContainer) 
                {
                        super.initialize();
                        super.configure(new ContextView(contextView));
                        injector.map(ClassA).asSingleton();
                        var myClass:ClassC = new ClassC();
                        myClass.num = 555;
                        injector.map(ClassC).toValue(myClass);
                        injector.injectInto(myClass);
                        super.injector.instantiateUnmapped(ClassA);
 
                }

Код AS3:

package  
{
        public class ClassC
        {
 
                public var num:int = 0;
 
                public function ClassC()
                {
                        //               
                }
 
        }
 
}

Код AS3:

package  
{
        import robotlegs.bender.framework.impl.Context;
        public class ClassA
        {
                [Inject]
                public var _c:ClassC;
 
                private var _context:Context;
 
                public function ClassA()
                {
                        _context = new Context();
                        _c = _context.injector.instantiateUnmapped(ClassC);
                        trace(_c.num);//why the value is not 555?
                }
 
        }
 
}

Добавлено через 2 минуты
Цитата:

А вы уже всё остальное выучили?)
Всё выучить наверное невозможно, выучил лишь на столько, на сколько могу найти применение.
Цитата:

Всеми возможными путями найдите какой-нибудь вам интересный(!) проект,
Вы наверное не подумали, что я ещё маленький)

TWETTI 27.07.2013 16:38

Не понятно ничего. Напишите подробно, что вы хотите сделать.
Почему класс ClassA содержит в себе иниализацию класса Context? [Inject] можно использовать только после того, как Context будет создан.


Часовой пояс GMT +4, время: 11:53.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.