2012-04-03 2 views
1

Кому-то повезло, что Ninject работает на MonoDroid? Я пробовал версии 2.0 и 4.0 с вашего сайта, а также попробовал версии .net.Ninject and MonoDroid

С Mono строит я получаю MissingMethodException в конкретизации моей StandardKernel

+0

Возможный дубликат [Монодоид и ниндъект] (http://stackoverflow.com/questions/6337227/monodroid-and-ninject) – ctacke

ответ

5

Я экспериментирую с Ninject на комбинированном проекте WP7/Monotouch/Mono для Android, и Ninject работает на удивление хорошо.

Я использовал последние источники, которые содержат файл проекта Ninject.WP7.csproj, который, кажется, устарел. Он содержит много DefineConstants. Я создал новые решения WP7/Monotouch/Mono для Android с этими константами, и все составлено и работает!

Константы, используемые:

SILVERLIGHT,SILVERLIGHT_40,NO_LCG,NO_ASSEMBLY_SCANNING,NO_WEB,NO_PARTIAL_TRUST,NO_SKIP_VISIBILITY,NO_EXCEPTION_SERIALIZATION,NO_DEBUG_SYMBOLS 

не уверен, что все они необходимы, но SilverLight один очень важно, потому что MonoTouch/Mono для Android реализовать большую часть Silverlight API.

Конечно, вы не можете создавать приложения для Android с помощью Ninject. Я использую его в основном для инсталляции конструктора, для создания .Net-объектов, таких как ViewManager, просмотра моделей с использованием репозитория и т. Д., Обычных вещей, которые вы делаете с инъекцией зависимостей.

+0

Спасибо, что это поможет. Я никогда не компилировал проект .net под Mono раньше. Я предполагаю, что вам нужно заменить ссылки на моно версию? какие-либо руководства о том, как это сделать? –

+0

Легкий способ начать - добавить проект библиотеки классов Android в проект Mono для Android, для которого вы хотите использовать Ninject. Затем добавьте все исходные файлы Ninject в проект. (Это довольно много, чтобы сделать это быстрее, откройте новый файл проекта и файл Ninject.csproj в режиме XML и скопируйте и вставьте ItemGroup). –

+0

Вы можете просто распаковать исходные файлы, щелкнуть правой кнопкой мыши в окне решения и выбрать «Включить в проект» (если вы проверите вторую кнопку в проводнике решений, чтобы показать все файлы в решении). – ashes999

1

Я не пытался получить Ninject работать, но я был бы очень удивлен, если он просто работал из коробки. Если есть сборка Silverlight от Ninject, у вас может быть больше удачи в этом, но никаких гарантий нет. «Лучшим» способом получить поддержку в Mono для Android было бы создание кода против Mono для Android-профиля как библиотеки классов.

Кроме того, есть другие возможности для размещения службы в ваших приложениях. У меня есть blog post up here, который рассказывает об использовании TinyIoC и Funq для местоположения службы.

+0

Может ли Tiny IoC поддерживать AOP? главным образом после того, как можно подключиться к жизненному циклу объекта, чтобы обернуть его такими аспектами, как ведение журнала. Если нет, то как его перестроить? Я предполагаю, что вы замените некоторые ссылки на Mono.Android, но какие? –

+0

Android действительно не предоставляет каких-либо хороших способов подключения к жизненному циклу своих объектов, таких как действия, поэтому контейнеры в конечном итоге используются для размещения службы. Если вы хотите сделать АОП, я видел людей, использующих PostSharp с Mono для приложений для Android, поскольку он работает во время компиляции, так что может быть вам полезен. –

+0

Из того, что я видел, большинство жизненных циклов АОП в основном просто перехватывает метод и обертывает его. Если вы закроете блок Try Catch вокруг Action, это в основном жизненный цикл этого метода. Вопрос в том, имеет ли контейнер DI это построение и дает вам возможность выполнять код перед вызовом действия –