Всем привет,
кто-нибудь юзал ninject для устранения зависимостей?
Я бы его заюзал, да смущает одно, как он узнает что какой-то класс запросил такой-то интерфейс? не через рефлексию ли случаем?
Здравствуйте, debugx, Вы писали:
D>Всем привет, D>кто-нибудь юзал ninject для устранения зависимостей? D>Я бы его заюзал, да смущает одно, как он узнает что какой-то класс запросил такой-то интерфейс? не через рефлексию ли случаем?
Чисто из спортивного итереса: чем не устраивает Unity?
Здравствуйте, debugx, Вы писали:
D>Всем привет, D>кто-нибудь юзал ninject для устранения зависимостей? D>Я бы его заюзал, да смущает одно, как он узнает что какой-то класс запросил такой-то интерфейс? не через рефлексию ли случаем?
Здравствуйте, Klikujiskaaan, Вы писали:
K>Здравствуйте, debugx, Вы писали:
D>>Всем привет, D>>кто-нибудь юзал ninject для устранения зависимостей? D>>Я бы его заюзал, да смущает одно, как он узнает что какой-то класс запросил такой-то интерфейс? не через рефлексию ли случаем? K>Чисто из спортивного итереса: чем не устраивает Unity?
А чем должен устраивать Unity? Отсутствием документации?
Здравствуйте, debugx, Вы писали:
D>кто-нибудь юзал ninject для устранения зависимостей?
Инъекция != устранение.
D>Я бы его заюзал, да смущает одно, как он узнает что какой-то класс запросил такой-то интерфейс? не через рефлексию ли случаем?
Для начала объясните, что значит "запросил интерфейс"?
Здравствуйте, xvost, Вы писали:
X>Здравствуйте, Jack128, Вы писали:
J>>а что, если какие то другие варианты???
X>Можно напрямую метаданные читать. X>Обычно это гораздо эффективнее
Свой аналог System.Reflection что ли реализовать? Что то маловероятно, чтоб хоть одна DI-либа этим занималась.
Здравствуйте, Jack128, Вы писали:
J>Здравствуйте, xvost, Вы писали:
X>>Здравствуйте, Jack128, Вы писали:
J>>>а что, если какие то другие варианты???
X>>Можно напрямую метаданные читать. X>>Обычно это гораздо эффективнее
J>Свой аналог System.Reflection что ли реализовать? Что то маловероятно, чтоб хоть одна DI-либа этим занималась.
Зато, ничто не мешает использовать ту же Cecil, в которой это уже реализовано.
Здравствуйте, Ziaw, Вы писали:
Z>Читать метаданные можно, но в DI надо не только прочитать сигнатуру конструктора (делается один раз), но и вызвать его (делается много раз).
Метаданные можно (и нужно) использовать на этапе исследования компонент и графа зависимостей. Через метаданные это делается на 2 порядка быстрее чем через рефлексию. После исследования, ес-но, все создавать и вызывать уже через рефлексию надо.
P.S. Все это имеет смысл когда кол-во классов в сборках начинает превышать десяток тысяч.
С уважением, Евгений
JetBrains, Inc. "Develop with pleasure!"
Здравствуйте, Klikujiskaaan, Вы писали:
K>Здравствуйте, debugx, Вы писали:
D>>Всем привет, D>>кто-нибудь юзал ninject для устранения зависимостей? D>>Я бы его заюзал, да смущает одно, как он узнает что какой-то класс запросил такой-то интерфейс? не через рефлексию ли случаем? K>Чисто из спортивного итереса: чем не устраивает Unity?
не юзал еще, сейчас посмотрю...
Здравствуйте, Ziaw, Вы писали:
Z>Для начала объясните, что значит "запросил интерфейс"?
метод или конструктор класса принимает в качестве параметра ссылку с типом интерфейса. При этом сам объект этого интерфейса ему никто не передает (кроме ninject разумеется
А вообще кто-нибудь юзал ninject в серьезных проектах? Или эта тулза так чисто на поиграться?
Здравствуйте, debugx, Вы писали:
Z>>Для начала объясните, что значит "запросил интерфейс"?
D>метод или конструктор класса принимает в качестве параметра ссылку с типом интерфейса. При этом сам объект этого интерфейса ему никто не передает (кроме ninject разумеется
Правильно поставленный вопрос содержит половину ответа. Узнать в рантайме типы параметров можно через рефлексию или чтение метаданных. Я не знаю ни одного DI фреймворка который бы читал метаданные, слишком тяжелое решение.
D>А вообще кто-нибудь юзал ninject в серьезных проектах? Или эта тулза так чисто на поиграться?
Конкретно ninject не юзал. Но в большинстве проектов юзал либо готовое решение либо похожий велосипед. Не представляю как управлять зависимостями без этого. Для поиграться DI фреймворк не нужен вообще.