В прошлом я использовал swiftsuspenders, который является контроллером IOC для ActionScript 3. В основном первая версия switchfsuspender имела нечто похожее на ядро Ninject, которое называлось инжектором.Мне нужно больше практических примеров Ninject
Если я хотел создать инжектор приложения (допустим, наиболее релевантные отображения, которые будут использоваться во всем приложении), мне пришлось вводить сам инжектор в классы приложений.
Мне интересно, какая практика использования kernel.get <> среди нескольких классов в приложении. Должен ли я вводить само ядро?
Лично я предпочел бы использовать kernel.inject, но если я могу сделать kernel.inject, я действительно могу ввести зависимости вручную, что, вероятно, лучше (поцелуй).
Тесты хорошие, но они далеки от реальных практических вопросов, поэтому я надеюсь, что вы можете помочь мне прояснить этот момент. Спасибо.
Редактировать: Я заметил, что некоторые люди говорят о «контейнере для корней». Похоже, что это концепция, которую я ищу. Как мне настроить корневой контейнер и позволить другим классам приложений это знать?
Edit2 Пример кода (пожалуйста, простите ошибки, это просто, например, ради):
class SomeClass
{
public SomeClass()
{
Command cmd = new Command();
cmd.execute();
}
}
class SomeOtherClass:ISomeOtherClass
{
public void allright()
{
//right
}
}
class Command
{
ISomeOtherClass dependency;
void execute()
{
dependency.allright();
}
}
Program.Main()
{
IKernel kernel = new StandardKernel();
kernel.Bind<SomeClass>().ToSelf().InSingletonScope();
kernel.Bind<ISomeOtherClass>().To<SomeOtherClass>();
SomeClass sc = kernel.Get<SomeClass>();
}
Я не проверял это еще, потому что я до сих пор борется с некоторыми вопросами инициализации, но мой вопрос, как может ли командный класс узнать о SomeOtherClass? Моя текущая гипотеза заключается в том, чтобы ввести ядро в SomeClass и использовать метод Inject.
Спасибо за ответ, это имеет смысл, но пока оно правильно, оно просто утверждает, что все зависимости должны быть известны заранее. Что происходит, когда это невозможно? (конечно, то, что я говорю, имеет смысл только в том случае, если объекты создаются динамически, что может произойти) – sebas
предположим, что SomeClass должен создать определенное число динамических объектов. Как SomeClass становится Level, и он должен создать 30 звезд. звезды имеют несколько зависимостей, как уровень может вводить эти зависимости в звезды с помощью ядра? – sebas
Это хороший вопрос, и вы выходите за рамки простых вопросов инъекции зависимостей, на которые можно ответить в этом формате. Такая ситуация (сложное создание объекта) имеет тенденцию требовать еще одну деталь, поэтому Ремо упомянул Фабрики в своем ответе. Вы должны исследовать либо создание фабрики звездообразования, либо ввести ее в SomeClass, либо Ninject разрешить звезды, используя собственный метод Factory или Bind(). ToProvider(). –